single
Transformaciones
Desliza para mostrar el menú
Las transformaciones de tensores son fundamentales al manipular datos. A medida que se profundiza en tareas de deep learning y ciencia de datos, se hace evidente que los datos encontrados no siempre están en el formato deseado. Esta lección presenta métodos en TensorFlow que permiten la manipulación de la estructura y el contenido de los tensores para cumplir con requisitos específicos.
Cambio de forma de tensores
Al trabajar con tensores, en ocasiones es necesario modificar la forma sin alterar los datos subyacentes. tf.reshape() resulta útil en estos casos.
Funcionamiento:
- El cambio de forma modifica la estructura del tensor, pero no sus datos. El número total de elementos antes y después del cambio de forma debe permanecer igual;
- Opera "llenando" la nueva forma por filas (de izquierda a derecha, de arriba hacia abajo).
1234567891011121314import tensorflow as tf # Create a tensor with shape (3, 2) tensor = tf.constant([[1, 2], [3, 4], [5, 6]]) # Reshape the tensor to shape (2, 3) reshaped_tensor = tf.reshape(tensor, (2, 3)) print(reshaped_tensor) print('-' * 50) # Reshape the tensor to shape (6, 1); # The size of the first dimention is determined automatically reshaped_tensor = tf.reshape(tensor, (-1, 1)) print(reshaped_tensor)
Al especificar la nueva forma, una dimensión puede ser -1. TensorFlow calculará el tamaño de esa dimensión para que el tamaño total permanezca constante.
Esto resulta especialmente útil cuando se desea alimentar tensores a una red neuronal pero las dimensiones no coinciden con la forma de entrada de la red.
Segmentación
La segmentación permite obtener una porción de un tensor. Es análoga a la segmentación de listas en Python, pero extendida a tensores multidimensionales.
Funcionamiento:
tf.slice()extrae una porción de un tensor. Requiere el índice inicial para la porción y el tamaño de la porción;- Si el tamaño es
-1, indica todos los elementos en esa dimensión.
12345678910111213import tensorflow as tf # Create a tensor tensor = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Slice tensor to extract sub-tensor from index (0, 1) of size (1, 2) sliced_tensor = tf.slice(tensor, begin=(0, 1), size=(1, 2)) print(sliced_tensor) print('-' * 50) # Slice tensor to extract sub-tensor from index (1, 0) of size (2, 2) sliced_tensor = tf.slice(tensor, (1, 0), (2, 2)) print(sliced_tensor)
Recuerde siempre el indexado basado en cero de TensorFlow, que es similar al indexado nativo de Python. Útil para extraer características o puntos de datos específicos de un conjunto de datos más grande.
Modificación de datos
Existe otra forma de segmentación que también permite modificar los datos originales, similar a la segmentación de arreglos en NumPy.
Cómo funciona:
- Usando
[], se puede segmentar e indexar tensores fácilmente, de manera similar a la segmentación en NumPy. Este método permite seleccionar filas, columnas o elementos específicos de un tensor; - Con
tf.Variable(), el tensor se vuelve mutable, permitiendo modificaciones directas mediante segmentación; - Para modificar los valores del subtensor seleccionado, utilice el método
.assign()con un tensor o lista que coincida con su forma.
12345678910111213import tensorflow as tf # Create a mutable tensor tensor = tf.Variable([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # Change the entire first row tensor[0, :].assign([0, 0, 0]) print(tensor) print('-' * 80) # Modify the second and the third columns tensor[:, 1:3].assign(tf.fill((3,2), 1)) print(tensor)
- La sintaxis de segmentación en TensorFlow está en gran medida inspirada en NumPy, por lo que si ya conoces NumPy, la transición al mecanismo de segmentación de TensorFlow es sencilla;
- Asegúrate siempre de utilizar
tf.Variable()para cualquier operación que requiera mutabilidad del tensor.
Concatenación
La concatenación permite unir múltiples tensores a lo largo de un eje especificado.
Cómo funciona:
tf.concat()combina tensores. El método requiere una lista de tensores que se desean concatenar y el eje a lo largo del cual realizar la operación;- El eje es basado en cero. Un eje de
0se refiere a filas (verticalmente) y un eje de1se refiere a columnas (horizontalmente).
123456789101112131415161718import tensorflow as tf # Create two tensors tensor1 = tf.constant([[1, 2, 3], [4, 5, 6]]) tensor2 = tf.constant([[7, 8, 9]]) # Concatenate tensors vertically (along rows) concatenated_tensor = tf.concat([tensor1, tensor2], axis=0) print(concatenated_tensor) print('-' * 50) # Create another set of tensors tensor3 = tf.constant([[1, 2], [4, 5]]) tensor4 = tf.constant([[3], [6]]) # Concatenate tensors horizontally (along columns) concatenated_tensor = tf.concat([tensor3, tensor4], axis=1) print(concatenated_tensor)
- Asegúrese de que los tensores que va a unir tengan dimensiones coincidentes en los ejes que no se concatenan;
- Esta operación es similar a
numpy.concatenate(), pero adaptada para tensores de TensorFlow.
Swipe to start coding
Está trabajando con un conjunto de datos compuesto por lecturas de varios sensores ubicados en diferentes lugares geográficos. Estos sensores registran datos meteorológicos como temperatura, presión y coordenadas geográficas normalizadas.
Sin embargo, al compilar las lecturas, descubrió que algunos de los datos se registraron incorrectamente.
También recibió nuevas lecturas de otros sensores que debe incluir.
Información del conjunto de datos
-
main_dataset: Un tensor de forma(6, 4)que representa 6 lecturas. Cada fila es una muestra y las columnas representan las siguientes características:- Temperatura (en Celsius);
- Presión (en hPa);
- Coordenada de latitud normalizada;
- Coordenada de longitud normalizada.
-
error_correction_data: Un tensor de forma(2, 4)que representa 2 lecturas corregidas para datos erróneos en el conjunto principal. -
additional_data: Un tensor de forma(3, 4)que representa 3 nuevas lecturas.
Objetivo
Preparar un conjunto de datos corregido y completo para la predicción meteorológica:
-
Corrección de datos:
- Se detectó que las lecturas en la 2ª y 5ª filas de
main_dataseteran inexactas. Reemplace estas filas enmain_datasetcon las filas deerror_correction_data.
- Se detectó que las lecturas en la 2ª y 5ª filas de
-
Incorporar datos adicionales:
- Concatenar
main_datasetconadditional_datapara incorporar las nuevas lecturas.
- Concatenar
-
Reestructuración en lotes:
- Para el entrenamiento por lotes, divida el conjunto de datos en lotes con 3 lecturas por lote. Reestructure
complete_dataset, donde la primera dimensión representa el tamaño del lote y la segunda dimensión representa el número de lecturas por lote.
- Para el entrenamiento por lotes, divida el conjunto de datos en lotes con 3 lecturas por lote. Reestructure
Solución
¡Gracias por tus comentarios!
single
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla