Capítulo 6: Proyecto: Generación de Dígitos Manuscritos con VAEs
6.1 Recopilación y Preprocesamiento de Datos
En este capítulo, emprenderemos un proyecto práctico para generar dígitos manuscritos utilizando Autoencoders Variacionales (VAEs). Este proyecto proporcionará experiencia práctica con todo el flujo de trabajo de los VAEs, desde la recopilación y preprocesamiento de datos hasta la construcción, entrenamiento y evaluación del modelo. Al final de este capítulo, tendrás una comprensión completa de cómo aplicar VAEs a datos del mundo real y generar imágenes de alta calidad.
Nuestro proyecto se centrará en el conjunto de datos MNIST, un conjunto de datos de referencia de dígitos manuscritos comúnmente utilizado en aprendizaje automático. El conjunto de datos MNIST contiene 70,000 imágenes en escala de grises de dígitos (0-9), cada una de tamaño 28x28 píxeles. Aprovecharemos el poder de los VAEs para aprender la distribución subyacente de estos dígitos y generar nuevas muestras realistas.
Abordaremos los siguientes temas en este capítulo:
- Recopilación y Preprocesamiento de Datos
- Creación del Modelo
- Entrenamiento del VAE
- Generación de Nuevos Dígitos Manuscritos
- Evaluación del Modelo
Comencemos con el primer paso de nuestro proyecto: la recopilación y preprocesamiento de datos.
La recopilación y el preprocesamiento de datos son pasos críticos en cualquier proyecto de aprendizaje automático. Datos correctamente preparados aseguran que el modelo pueda aprender de manera efectiva y generalizar bien a nuevos datos. En esta sección, nos enfocaremos en recopilar el conjunto de datos MNIST y preprocesarlo para que sea adecuado para entrenar nuestro VAE.
6.1.1 Recopilación del Conjunto de Datos MNIST
El conjunto de datos MNIST está fácilmente disponible en muchas bibliotecas de aprendizaje automático, incluyendo TensorFlow y Keras. Utilizaremos TensorFlow para descargar y cargar el conjunto de datos. El conjunto de datos está dividido en un conjunto de entrenamiento de 60,000 imágenes y un conjunto de prueba de 10,000 imágenes.
Ejemplo: Carga del Conjunto de Datos MNIST
import tensorflow as tf
# Load the MNIST dataset
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
# Print the shape of the datasets
print(f"Training data shape: {x_train.shape}")
print(f"Test data shape: {x_test.shape}")
El código de ejemplo es para importar la biblioteca TensorFlow, cargar el conjunto de datos MNIST e imprimir las formas de los conjuntos de datos de entrenamiento y prueba. El conjunto de datos MNIST, comúnmente utilizado para tareas de aprendizaje automático y visión por computadora, es una gran base de datos de dígitos manuscritos. Las formas de los conjuntos de datos representan las dimensiones de los arreglos de datos, siendo el conjunto de entrenamiento usualmente más grande que el conjunto de prueba.
6.1.2 Preprocesamiento de los Datos
El preprocesamiento de los datos implica varios pasos:
- Normalización de los valores de los píxeles.
- Reestructuración de los datos para ajustarse a los requisitos de entrada del VAE.
- (Opcional) Aplicación de técnicas de aumento de datos.
Normalización:
La normalización escala los valores de los píxeles al rango [0, 1], lo que ayuda al modelo a converger más rápido y a desempeñarse mejor.
Reestructuración:
El VAE espera que los datos de entrada tengan una forma específica. Para el conjunto de datos MNIST, cada imagen es de 28x28 píxeles. Necesitamos aplanar estas imágenes en vectores de longitud 784 (28 * 28).
Aumento de Datos:
El aumento de datos puede mejorar el conjunto de datos creando versiones modificadas de las imágenes existentes, como imágenes rotadas o desplazadas. Este paso es opcional, pero puede mejorar la robustez del modelo.
Ejemplo: Preprocesamiento de los Datos
import numpy as np
# Normalize the pixel values to the range [0, 1]
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
# Reshape the data to (num_samples, num_features)
x_train = x_train.reshape((x_train.shape[0], -1))
x_test = x_test.reshape((x_test.shape[0], -1))
# Print the shape of the reshaped datasets
print(f"Reshaped training data shape: {x_train.shape}")
print(f"Reshaped test data shape: {x_test.shape}")
Primero importa la biblioteca numpy, que se utiliza para operaciones numéricas. Luego normaliza los valores de los píxeles de los conjuntos de datos x_train y x_test convirtiendo el tipo de dato a 'float32' y dividiendo por 255. El proceso de normalización asegura que los valores de los píxeles estén dentro del rango [0, 1], lo cual es una práctica común para los datos de imagen antes de ser introducidos en un modelo de aprendizaje automático.
El siguiente paso es reestructurar los datos a dos dimensiones: (número de muestras, número de características). Esto se hace para preparar los datos para un modelo de aprendizaje automático que espera una entrada con esta forma. Finalmente, imprime la forma de los conjuntos de datos de entrenamiento y prueba reestructurados.
6.1.3 Aumento de Datos (Opcional)
El aumento de datos se puede realizar utilizando varias técnicas para crear nuevas muestras de entrenamiento. Este paso es opcional pero se recomienda para mejorar el rendimiento del modelo, especialmente cuando se trabaja con datos limitados. En este proyecto, nos centraremos en los pasos básicos de preprocesamiento y no realizaremos aumento de datos.
Ejemplo: Aumento de Datos (Opcional)
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# Create an image data generator with augmentation options
datagen = ImageDataGenerator(
rotation_range=10,
width_shift_range=0.1,
height_shift_range=0.1
)
# Apply data augmentation to the training data
datagen.fit(x_train.reshape(-1, 28, 28, 1))
# Example of using the data generator
for x_batch, y_batch in datagen.flow(x_train.reshape(-1, 28, 28, 1), y_train, batch_size=32):
# Visualize the augmented images
for i in range(9):
plt.subplot(3, 3, i+1)
plt.imshow(x_batch[i].reshape(28, 28), cmap='gray')
plt.axis('off')
plt.show()
break
En este código, se crea un ImageDataGenerator con opciones para rotación y desplazamiento en ancho y alto. Estas opciones permiten aleatorizar las transformaciones que se aplicarán a cada imagen, ayudando al modelo a generalizar mejor.
La línea datagen.fit
aplica el aumento de datos definido al conjunto de entrenamiento, 'x_train'.
La última parte del código es un ejemplo de cómo usar el generador de datos. Para cada lote de imágenes aumentadas y sus etiquetas correspondientes, se visualizan las primeras nueve imágenes. Después de mostrar el primer lote de imágenes aumentadas, se rompe el bucle.
Resumen
En esta sección, recolectamos y preprocesamos con éxito el conjunto de datos MNIST. Normalizamos los valores de los píxeles al rango [0, 1] y reestructuramos los datos para que se ajusten a los requisitos de entrada del VAE. También discutimos el paso opcional del aumento de datos, que puede ayudar a mejorar la robustez del modelo.
Con nuestros datos preparados, estamos listos para pasar al siguiente paso: crear el modelo VAE.
6.1 Recopilación y Preprocesamiento de Datos
En este capítulo, emprenderemos un proyecto práctico para generar dígitos manuscritos utilizando Autoencoders Variacionales (VAEs). Este proyecto proporcionará experiencia práctica con todo el flujo de trabajo de los VAEs, desde la recopilación y preprocesamiento de datos hasta la construcción, entrenamiento y evaluación del modelo. Al final de este capítulo, tendrás una comprensión completa de cómo aplicar VAEs a datos del mundo real y generar imágenes de alta calidad.
Nuestro proyecto se centrará en el conjunto de datos MNIST, un conjunto de datos de referencia de dígitos manuscritos comúnmente utilizado en aprendizaje automático. El conjunto de datos MNIST contiene 70,000 imágenes en escala de grises de dígitos (0-9), cada una de tamaño 28x28 píxeles. Aprovecharemos el poder de los VAEs para aprender la distribución subyacente de estos dígitos y generar nuevas muestras realistas.
Abordaremos los siguientes temas en este capítulo:
- Recopilación y Preprocesamiento de Datos
- Creación del Modelo
- Entrenamiento del VAE
- Generación de Nuevos Dígitos Manuscritos
- Evaluación del Modelo
Comencemos con el primer paso de nuestro proyecto: la recopilación y preprocesamiento de datos.
La recopilación y el preprocesamiento de datos son pasos críticos en cualquier proyecto de aprendizaje automático. Datos correctamente preparados aseguran que el modelo pueda aprender de manera efectiva y generalizar bien a nuevos datos. En esta sección, nos enfocaremos en recopilar el conjunto de datos MNIST y preprocesarlo para que sea adecuado para entrenar nuestro VAE.
6.1.1 Recopilación del Conjunto de Datos MNIST
El conjunto de datos MNIST está fácilmente disponible en muchas bibliotecas de aprendizaje automático, incluyendo TensorFlow y Keras. Utilizaremos TensorFlow para descargar y cargar el conjunto de datos. El conjunto de datos está dividido en un conjunto de entrenamiento de 60,000 imágenes y un conjunto de prueba de 10,000 imágenes.
Ejemplo: Carga del Conjunto de Datos MNIST
import tensorflow as tf
# Load the MNIST dataset
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
# Print the shape of the datasets
print(f"Training data shape: {x_train.shape}")
print(f"Test data shape: {x_test.shape}")
El código de ejemplo es para importar la biblioteca TensorFlow, cargar el conjunto de datos MNIST e imprimir las formas de los conjuntos de datos de entrenamiento y prueba. El conjunto de datos MNIST, comúnmente utilizado para tareas de aprendizaje automático y visión por computadora, es una gran base de datos de dígitos manuscritos. Las formas de los conjuntos de datos representan las dimensiones de los arreglos de datos, siendo el conjunto de entrenamiento usualmente más grande que el conjunto de prueba.
6.1.2 Preprocesamiento de los Datos
El preprocesamiento de los datos implica varios pasos:
- Normalización de los valores de los píxeles.
- Reestructuración de los datos para ajustarse a los requisitos de entrada del VAE.
- (Opcional) Aplicación de técnicas de aumento de datos.
Normalización:
La normalización escala los valores de los píxeles al rango [0, 1], lo que ayuda al modelo a converger más rápido y a desempeñarse mejor.
Reestructuración:
El VAE espera que los datos de entrada tengan una forma específica. Para el conjunto de datos MNIST, cada imagen es de 28x28 píxeles. Necesitamos aplanar estas imágenes en vectores de longitud 784 (28 * 28).
Aumento de Datos:
El aumento de datos puede mejorar el conjunto de datos creando versiones modificadas de las imágenes existentes, como imágenes rotadas o desplazadas. Este paso es opcional, pero puede mejorar la robustez del modelo.
Ejemplo: Preprocesamiento de los Datos
import numpy as np
# Normalize the pixel values to the range [0, 1]
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
# Reshape the data to (num_samples, num_features)
x_train = x_train.reshape((x_train.shape[0], -1))
x_test = x_test.reshape((x_test.shape[0], -1))
# Print the shape of the reshaped datasets
print(f"Reshaped training data shape: {x_train.shape}")
print(f"Reshaped test data shape: {x_test.shape}")
Primero importa la biblioteca numpy, que se utiliza para operaciones numéricas. Luego normaliza los valores de los píxeles de los conjuntos de datos x_train y x_test convirtiendo el tipo de dato a 'float32' y dividiendo por 255. El proceso de normalización asegura que los valores de los píxeles estén dentro del rango [0, 1], lo cual es una práctica común para los datos de imagen antes de ser introducidos en un modelo de aprendizaje automático.
El siguiente paso es reestructurar los datos a dos dimensiones: (número de muestras, número de características). Esto se hace para preparar los datos para un modelo de aprendizaje automático que espera una entrada con esta forma. Finalmente, imprime la forma de los conjuntos de datos de entrenamiento y prueba reestructurados.
6.1.3 Aumento de Datos (Opcional)
El aumento de datos se puede realizar utilizando varias técnicas para crear nuevas muestras de entrenamiento. Este paso es opcional pero se recomienda para mejorar el rendimiento del modelo, especialmente cuando se trabaja con datos limitados. En este proyecto, nos centraremos en los pasos básicos de preprocesamiento y no realizaremos aumento de datos.
Ejemplo: Aumento de Datos (Opcional)
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# Create an image data generator with augmentation options
datagen = ImageDataGenerator(
rotation_range=10,
width_shift_range=0.1,
height_shift_range=0.1
)
# Apply data augmentation to the training data
datagen.fit(x_train.reshape(-1, 28, 28, 1))
# Example of using the data generator
for x_batch, y_batch in datagen.flow(x_train.reshape(-1, 28, 28, 1), y_train, batch_size=32):
# Visualize the augmented images
for i in range(9):
plt.subplot(3, 3, i+1)
plt.imshow(x_batch[i].reshape(28, 28), cmap='gray')
plt.axis('off')
plt.show()
break
En este código, se crea un ImageDataGenerator con opciones para rotación y desplazamiento en ancho y alto. Estas opciones permiten aleatorizar las transformaciones que se aplicarán a cada imagen, ayudando al modelo a generalizar mejor.
La línea datagen.fit
aplica el aumento de datos definido al conjunto de entrenamiento, 'x_train'.
La última parte del código es un ejemplo de cómo usar el generador de datos. Para cada lote de imágenes aumentadas y sus etiquetas correspondientes, se visualizan las primeras nueve imágenes. Después de mostrar el primer lote de imágenes aumentadas, se rompe el bucle.
Resumen
En esta sección, recolectamos y preprocesamos con éxito el conjunto de datos MNIST. Normalizamos los valores de los píxeles al rango [0, 1] y reestructuramos los datos para que se ajusten a los requisitos de entrada del VAE. También discutimos el paso opcional del aumento de datos, que puede ayudar a mejorar la robustez del modelo.
Con nuestros datos preparados, estamos listos para pasar al siguiente paso: crear el modelo VAE.
6.1 Recopilación y Preprocesamiento de Datos
En este capítulo, emprenderemos un proyecto práctico para generar dígitos manuscritos utilizando Autoencoders Variacionales (VAEs). Este proyecto proporcionará experiencia práctica con todo el flujo de trabajo de los VAEs, desde la recopilación y preprocesamiento de datos hasta la construcción, entrenamiento y evaluación del modelo. Al final de este capítulo, tendrás una comprensión completa de cómo aplicar VAEs a datos del mundo real y generar imágenes de alta calidad.
Nuestro proyecto se centrará en el conjunto de datos MNIST, un conjunto de datos de referencia de dígitos manuscritos comúnmente utilizado en aprendizaje automático. El conjunto de datos MNIST contiene 70,000 imágenes en escala de grises de dígitos (0-9), cada una de tamaño 28x28 píxeles. Aprovecharemos el poder de los VAEs para aprender la distribución subyacente de estos dígitos y generar nuevas muestras realistas.
Abordaremos los siguientes temas en este capítulo:
- Recopilación y Preprocesamiento de Datos
- Creación del Modelo
- Entrenamiento del VAE
- Generación de Nuevos Dígitos Manuscritos
- Evaluación del Modelo
Comencemos con el primer paso de nuestro proyecto: la recopilación y preprocesamiento de datos.
La recopilación y el preprocesamiento de datos son pasos críticos en cualquier proyecto de aprendizaje automático. Datos correctamente preparados aseguran que el modelo pueda aprender de manera efectiva y generalizar bien a nuevos datos. En esta sección, nos enfocaremos en recopilar el conjunto de datos MNIST y preprocesarlo para que sea adecuado para entrenar nuestro VAE.
6.1.1 Recopilación del Conjunto de Datos MNIST
El conjunto de datos MNIST está fácilmente disponible en muchas bibliotecas de aprendizaje automático, incluyendo TensorFlow y Keras. Utilizaremos TensorFlow para descargar y cargar el conjunto de datos. El conjunto de datos está dividido en un conjunto de entrenamiento de 60,000 imágenes y un conjunto de prueba de 10,000 imágenes.
Ejemplo: Carga del Conjunto de Datos MNIST
import tensorflow as tf
# Load the MNIST dataset
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
# Print the shape of the datasets
print(f"Training data shape: {x_train.shape}")
print(f"Test data shape: {x_test.shape}")
El código de ejemplo es para importar la biblioteca TensorFlow, cargar el conjunto de datos MNIST e imprimir las formas de los conjuntos de datos de entrenamiento y prueba. El conjunto de datos MNIST, comúnmente utilizado para tareas de aprendizaje automático y visión por computadora, es una gran base de datos de dígitos manuscritos. Las formas de los conjuntos de datos representan las dimensiones de los arreglos de datos, siendo el conjunto de entrenamiento usualmente más grande que el conjunto de prueba.
6.1.2 Preprocesamiento de los Datos
El preprocesamiento de los datos implica varios pasos:
- Normalización de los valores de los píxeles.
- Reestructuración de los datos para ajustarse a los requisitos de entrada del VAE.
- (Opcional) Aplicación de técnicas de aumento de datos.
Normalización:
La normalización escala los valores de los píxeles al rango [0, 1], lo que ayuda al modelo a converger más rápido y a desempeñarse mejor.
Reestructuración:
El VAE espera que los datos de entrada tengan una forma específica. Para el conjunto de datos MNIST, cada imagen es de 28x28 píxeles. Necesitamos aplanar estas imágenes en vectores de longitud 784 (28 * 28).
Aumento de Datos:
El aumento de datos puede mejorar el conjunto de datos creando versiones modificadas de las imágenes existentes, como imágenes rotadas o desplazadas. Este paso es opcional, pero puede mejorar la robustez del modelo.
Ejemplo: Preprocesamiento de los Datos
import numpy as np
# Normalize the pixel values to the range [0, 1]
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
# Reshape the data to (num_samples, num_features)
x_train = x_train.reshape((x_train.shape[0], -1))
x_test = x_test.reshape((x_test.shape[0], -1))
# Print the shape of the reshaped datasets
print(f"Reshaped training data shape: {x_train.shape}")
print(f"Reshaped test data shape: {x_test.shape}")
Primero importa la biblioteca numpy, que se utiliza para operaciones numéricas. Luego normaliza los valores de los píxeles de los conjuntos de datos x_train y x_test convirtiendo el tipo de dato a 'float32' y dividiendo por 255. El proceso de normalización asegura que los valores de los píxeles estén dentro del rango [0, 1], lo cual es una práctica común para los datos de imagen antes de ser introducidos en un modelo de aprendizaje automático.
El siguiente paso es reestructurar los datos a dos dimensiones: (número de muestras, número de características). Esto se hace para preparar los datos para un modelo de aprendizaje automático que espera una entrada con esta forma. Finalmente, imprime la forma de los conjuntos de datos de entrenamiento y prueba reestructurados.
6.1.3 Aumento de Datos (Opcional)
El aumento de datos se puede realizar utilizando varias técnicas para crear nuevas muestras de entrenamiento. Este paso es opcional pero se recomienda para mejorar el rendimiento del modelo, especialmente cuando se trabaja con datos limitados. En este proyecto, nos centraremos en los pasos básicos de preprocesamiento y no realizaremos aumento de datos.
Ejemplo: Aumento de Datos (Opcional)
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# Create an image data generator with augmentation options
datagen = ImageDataGenerator(
rotation_range=10,
width_shift_range=0.1,
height_shift_range=0.1
)
# Apply data augmentation to the training data
datagen.fit(x_train.reshape(-1, 28, 28, 1))
# Example of using the data generator
for x_batch, y_batch in datagen.flow(x_train.reshape(-1, 28, 28, 1), y_train, batch_size=32):
# Visualize the augmented images
for i in range(9):
plt.subplot(3, 3, i+1)
plt.imshow(x_batch[i].reshape(28, 28), cmap='gray')
plt.axis('off')
plt.show()
break
En este código, se crea un ImageDataGenerator con opciones para rotación y desplazamiento en ancho y alto. Estas opciones permiten aleatorizar las transformaciones que se aplicarán a cada imagen, ayudando al modelo a generalizar mejor.
La línea datagen.fit
aplica el aumento de datos definido al conjunto de entrenamiento, 'x_train'.
La última parte del código es un ejemplo de cómo usar el generador de datos. Para cada lote de imágenes aumentadas y sus etiquetas correspondientes, se visualizan las primeras nueve imágenes. Después de mostrar el primer lote de imágenes aumentadas, se rompe el bucle.
Resumen
En esta sección, recolectamos y preprocesamos con éxito el conjunto de datos MNIST. Normalizamos los valores de los píxeles al rango [0, 1] y reestructuramos los datos para que se ajusten a los requisitos de entrada del VAE. También discutimos el paso opcional del aumento de datos, que puede ayudar a mejorar la robustez del modelo.
Con nuestros datos preparados, estamos listos para pasar al siguiente paso: crear el modelo VAE.
6.1 Recopilación y Preprocesamiento de Datos
En este capítulo, emprenderemos un proyecto práctico para generar dígitos manuscritos utilizando Autoencoders Variacionales (VAEs). Este proyecto proporcionará experiencia práctica con todo el flujo de trabajo de los VAEs, desde la recopilación y preprocesamiento de datos hasta la construcción, entrenamiento y evaluación del modelo. Al final de este capítulo, tendrás una comprensión completa de cómo aplicar VAEs a datos del mundo real y generar imágenes de alta calidad.
Nuestro proyecto se centrará en el conjunto de datos MNIST, un conjunto de datos de referencia de dígitos manuscritos comúnmente utilizado en aprendizaje automático. El conjunto de datos MNIST contiene 70,000 imágenes en escala de grises de dígitos (0-9), cada una de tamaño 28x28 píxeles. Aprovecharemos el poder de los VAEs para aprender la distribución subyacente de estos dígitos y generar nuevas muestras realistas.
Abordaremos los siguientes temas en este capítulo:
- Recopilación y Preprocesamiento de Datos
- Creación del Modelo
- Entrenamiento del VAE
- Generación de Nuevos Dígitos Manuscritos
- Evaluación del Modelo
Comencemos con el primer paso de nuestro proyecto: la recopilación y preprocesamiento de datos.
La recopilación y el preprocesamiento de datos son pasos críticos en cualquier proyecto de aprendizaje automático. Datos correctamente preparados aseguran que el modelo pueda aprender de manera efectiva y generalizar bien a nuevos datos. En esta sección, nos enfocaremos en recopilar el conjunto de datos MNIST y preprocesarlo para que sea adecuado para entrenar nuestro VAE.
6.1.1 Recopilación del Conjunto de Datos MNIST
El conjunto de datos MNIST está fácilmente disponible en muchas bibliotecas de aprendizaje automático, incluyendo TensorFlow y Keras. Utilizaremos TensorFlow para descargar y cargar el conjunto de datos. El conjunto de datos está dividido en un conjunto de entrenamiento de 60,000 imágenes y un conjunto de prueba de 10,000 imágenes.
Ejemplo: Carga del Conjunto de Datos MNIST
import tensorflow as tf
# Load the MNIST dataset
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
# Print the shape of the datasets
print(f"Training data shape: {x_train.shape}")
print(f"Test data shape: {x_test.shape}")
El código de ejemplo es para importar la biblioteca TensorFlow, cargar el conjunto de datos MNIST e imprimir las formas de los conjuntos de datos de entrenamiento y prueba. El conjunto de datos MNIST, comúnmente utilizado para tareas de aprendizaje automático y visión por computadora, es una gran base de datos de dígitos manuscritos. Las formas de los conjuntos de datos representan las dimensiones de los arreglos de datos, siendo el conjunto de entrenamiento usualmente más grande que el conjunto de prueba.
6.1.2 Preprocesamiento de los Datos
El preprocesamiento de los datos implica varios pasos:
- Normalización de los valores de los píxeles.
- Reestructuración de los datos para ajustarse a los requisitos de entrada del VAE.
- (Opcional) Aplicación de técnicas de aumento de datos.
Normalización:
La normalización escala los valores de los píxeles al rango [0, 1], lo que ayuda al modelo a converger más rápido y a desempeñarse mejor.
Reestructuración:
El VAE espera que los datos de entrada tengan una forma específica. Para el conjunto de datos MNIST, cada imagen es de 28x28 píxeles. Necesitamos aplanar estas imágenes en vectores de longitud 784 (28 * 28).
Aumento de Datos:
El aumento de datos puede mejorar el conjunto de datos creando versiones modificadas de las imágenes existentes, como imágenes rotadas o desplazadas. Este paso es opcional, pero puede mejorar la robustez del modelo.
Ejemplo: Preprocesamiento de los Datos
import numpy as np
# Normalize the pixel values to the range [0, 1]
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
# Reshape the data to (num_samples, num_features)
x_train = x_train.reshape((x_train.shape[0], -1))
x_test = x_test.reshape((x_test.shape[0], -1))
# Print the shape of the reshaped datasets
print(f"Reshaped training data shape: {x_train.shape}")
print(f"Reshaped test data shape: {x_test.shape}")
Primero importa la biblioteca numpy, que se utiliza para operaciones numéricas. Luego normaliza los valores de los píxeles de los conjuntos de datos x_train y x_test convirtiendo el tipo de dato a 'float32' y dividiendo por 255. El proceso de normalización asegura que los valores de los píxeles estén dentro del rango [0, 1], lo cual es una práctica común para los datos de imagen antes de ser introducidos en un modelo de aprendizaje automático.
El siguiente paso es reestructurar los datos a dos dimensiones: (número de muestras, número de características). Esto se hace para preparar los datos para un modelo de aprendizaje automático que espera una entrada con esta forma. Finalmente, imprime la forma de los conjuntos de datos de entrenamiento y prueba reestructurados.
6.1.3 Aumento de Datos (Opcional)
El aumento de datos se puede realizar utilizando varias técnicas para crear nuevas muestras de entrenamiento. Este paso es opcional pero se recomienda para mejorar el rendimiento del modelo, especialmente cuando se trabaja con datos limitados. En este proyecto, nos centraremos en los pasos básicos de preprocesamiento y no realizaremos aumento de datos.
Ejemplo: Aumento de Datos (Opcional)
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# Create an image data generator with augmentation options
datagen = ImageDataGenerator(
rotation_range=10,
width_shift_range=0.1,
height_shift_range=0.1
)
# Apply data augmentation to the training data
datagen.fit(x_train.reshape(-1, 28, 28, 1))
# Example of using the data generator
for x_batch, y_batch in datagen.flow(x_train.reshape(-1, 28, 28, 1), y_train, batch_size=32):
# Visualize the augmented images
for i in range(9):
plt.subplot(3, 3, i+1)
plt.imshow(x_batch[i].reshape(28, 28), cmap='gray')
plt.axis('off')
plt.show()
break
En este código, se crea un ImageDataGenerator con opciones para rotación y desplazamiento en ancho y alto. Estas opciones permiten aleatorizar las transformaciones que se aplicarán a cada imagen, ayudando al modelo a generalizar mejor.
La línea datagen.fit
aplica el aumento de datos definido al conjunto de entrenamiento, 'x_train'.
La última parte del código es un ejemplo de cómo usar el generador de datos. Para cada lote de imágenes aumentadas y sus etiquetas correspondientes, se visualizan las primeras nueve imágenes. Después de mostrar el primer lote de imágenes aumentadas, se rompe el bucle.
Resumen
En esta sección, recolectamos y preprocesamos con éxito el conjunto de datos MNIST. Normalizamos los valores de los píxeles al rango [0, 1] y reestructuramos los datos para que se ajusten a los requisitos de entrada del VAE. También discutimos el paso opcional del aumento de datos, que puede ayudar a mejorar la robustez del modelo.
Con nuestros datos preparados, estamos listos para pasar al siguiente paso: crear el modelo VAE.