Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Transformaciones | Tensor Operations and Execution
Introducción a TensorFlow

Transformaciones

Transformaciones de tensores

Esta lección explora las operaciones avanzadas de transformación de tensores.

Las transformaciones de tensores son fundamentales al manejar datos. A medida que se profundiza en tareas de aprendizaje profundo 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 cambiar la forma sin modificar los datos subyacentes. tf.reshape() es útil en estos casos.

Cómo funciona:

  • 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).
reshape
1234567891011121314
import 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)
Note
Nota

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 es 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 recuperar una porción de un tensor. Es análoga a la segmentación de listas en Python, pero extendida a tensores multidimensionales.

Cómo funciona:

  • 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.
slice
12345678910111213
import 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)
Note
Nota

Recuerda 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, se utiliza el método .assign() con un tensor o lista que coincida con su forma.
assign
12345678910111213
import 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)
Note
Nota
  • La sintaxis de segmentación en TensorFlow está en gran medida inspirada en NumPy, por lo que si estás familiarizado con NumPy, la transición al mecanismo de segmentación de TensorFlow es sencilla;
  • Siempre asegúrate de utilizar tf.Variable() para cualquier operación que requiera mutabilidad de tensores.

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 deseas concatenar y el eje a lo largo del cual realizar la operación;
  • El eje es basado en cero. Un eje de 0 se refiere a filas (verticalmente) y un eje de 1 se refiere a columnas (horizontalmente).
concat_fixed
123456789101112131415161718
import 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)
Note
Nota
  • Asegúrate de que los tensores que estás uniendo tengan dimensiones coincidentes en los ejes no concatenados;
  • Esta operación es similar a numpy.concatenate(), pero adaptada para tensores de TensorFlow.
¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 3
single

single

Transformaciones

Desliza para mostrar el menú

Transformaciones de tensores

Esta lección explora las operaciones avanzadas de transformación de tensores.

Las transformaciones de tensores son fundamentales al manejar datos. A medida que se profundiza en tareas de aprendizaje profundo 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 cambiar la forma sin modificar los datos subyacentes. tf.reshape() es útil en estos casos.

Cómo funciona:

  • 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).
reshape
1234567891011121314
import 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)
Note
Nota

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 es 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 recuperar una porción de un tensor. Es análoga a la segmentación de listas en Python, pero extendida a tensores multidimensionales.

Cómo funciona:

  • 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.
slice
12345678910111213
import 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)
Note
Nota

Recuerda 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, se utiliza el método .assign() con un tensor o lista que coincida con su forma.
assign
12345678910111213
import 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)
Note
Nota
  • La sintaxis de segmentación en TensorFlow está en gran medida inspirada en NumPy, por lo que si estás familiarizado con NumPy, la transición al mecanismo de segmentación de TensorFlow es sencilla;
  • Siempre asegúrate de utilizar tf.Variable() para cualquier operación que requiera mutabilidad de tensores.

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 deseas concatenar y el eje a lo largo del cual realizar la operación;
  • El eje es basado en cero. Un eje de 0 se refiere a filas (verticalmente) y un eje de 1 se refiere a columnas (horizontalmente).
concat_fixed
123456789101112131415161718
import 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)
Note
Nota
  • Asegúrate de que los tensores que estás uniendo tengan dimensiones coincidentes en los ejes no concatenados;
  • Esta operación es similar a numpy.concatenate(), pero adaptada para tensores de TensorFlow.
Tarea

Desliza para comenzar a programar

Contexto

Estás trabajando con un conjunto de datos compuesto por lecturas de varios sensores ubicados en diferentes localizaciones geográficas. Estos sensores registran datos meteorológicos como temperatura, presión y coordenadas geográficas normalizadas.

Sin embargo, al compilar las lecturas, descubriste que algunos de los datos se registraron incorrectamente.

También recibiste nuevas lecturas de otros sensores que necesitas incluir.

Información del conjunto de datos

  1. 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.
  2. error_correction_data: Un tensor de forma (2, 4) que representa 2 lecturas corregidas para datos erróneos en el conjunto principal.

  3. 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:

  1. Corrección de datos:

    • Se detectó que las lecturas en la 2ª y 5ª filas de main_dataset eran inexactas. Sustituye estas filas en main_dataset por las filas de error_correction_data.
  2. Incorporación de datos adicionales:

    • Concatenar main_dataset con additional_data para incorporar las nuevas lecturas.
  3. Reformateo en lotes:

    • Para el entrenamiento por lotes, se desea dividir el conjunto de datos en lotes con 3 lecturas por lote. Reformatea 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.

Solución

Switch to desktopCambia al escritorio para practicar en el mundo realContinúe desde donde se encuentra utilizando una de las siguientes opciones
¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 3
single

single

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

some-alt