Capítulo 10: Proyecto: Generación de Imágenes con Modelos de Difusión
10.1 Recopilación y Preprocesamiento de Datos
En este capítulo, emprenderemos un emocionante proyecto para generar imágenes utilizando modelos de difusión. Este proyecto proporcionará una experiencia práctica con todo el flujo de trabajo de construir, entrenar y evaluar un modelo de difusión para la generación de imágenes. Al final de este capítulo, tendrás una comprensión completa de cómo aplicar modelos de difusión para crear imágenes de alta calidad a partir de ruido aleatorio.
Cubrirá los siguientes temas en este capítulo:
- Recopilación y Preprocesamiento de Datos
- Creación del Modelo
- Entrenamiento del Modelo
- Generación de Imágenes
- Evaluación del Modelo
Comencemos con el primer paso de nuestro proyecto: la recopilación y el preprocesamiento de datos.
El inicio de cualquier proyecto de aprendizaje automático invariablemente comienza con la recopilación y el preprocesamiento de los datos relevantes. En el contexto de nuestro proyecto actual, que se centra en la generación de imágenes, esto se traduce en la necesidad de un conjunto de datos completo de imágenes.
Esto es crucial ya que el modelo de difusión que estamos empleando aprende de este conjunto de datos para generar imágenes. Para obtener este conjunto de datos, utilizaremos un conjunto de datos de acceso público que abarca una amplia gama de imágenes. Sin embargo, el conjunto de datos sin procesar no se puede alimentar directamente en el modelo de difusión para fines de entrenamiento.
Requerirá una etapa de preprocesamiento, un proceso que implica limpiar, normalizar y posiblemente aumentar los datos para asegurar que estén en un formato óptimo para entrenar el modelo de difusión. Este paso es esencial ya que no solo mejora la eficiencia del proceso de entrenamiento del modelo, sino que también influye significativamente en la calidad de las imágenes generadas.
10.1.1 Recopilación de Datos de Imagen
Utilizaremos el conjunto de datos CIFAR-10, que es un conjunto de datos bien conocido que consiste en 60,000 imágenes en color de 32x32 en 10 clases diferentes. El conjunto de datos CIFAR-10 es ampliamente utilizado para entrenar y evaluar modelos de generación de imágenes.
Ejemplo: Cargando el Conjunto de Datos CIFAR-10
import tensorflow as tf
from tensorflow.keras.datasets import cifar10
# Load the CIFAR-10 dataset
(train_images, _), (test_images, _) = cifar10.load_data()
# Combine training and test images
images = np.concatenate([train_images, test_images], axis=0)
# Print the shape of the dataset
print(f"Dataset shape: {images.shape}")
Este código de ejemplo utiliza la biblioteca TensorFlow para cargar el conjunto de datos CIFAR-10, que es una colección de 60,000 imágenes en color de 32x32 en 10 clases, con 6,000 imágenes por clase. Hay 50,000 imágenes de entrenamiento y 10,000 imágenes de prueba.
El código combina las imágenes de entrenamiento y prueba en un solo conjunto de datos, y luego imprime la forma de este conjunto de datos combinado.
10.1.2 Normalización y Reescalado de Imágenes
Para asegurar que las imágenes estén en un formato adecuado para entrenar el modelo de difusión, necesitamos normalizarlas y reescalarlas. Normalizar las imágenes implica escalar los valores de los píxeles a un rango de [0, 1]. Además, reescalaremos las imágenes para asegurar que estén centradas alrededor de cero.
Ejemplo: Normalización y Reescalado de las Imágenes
# Normalize and rescale the images
images = images.astype('float32') / 255.0
images = (images - 0.5) / 0.5
# Print the range of pixel values
print(f"Pixel value range: [{images.min()}, {images.max()}]")
El código está normalizando y reescalando los valores de los píxeles de un arreglo de imágenes. Inicialmente, convierte los valores de los píxeles de enteros a flotantes y los escala entre 0 y 1 dividiendo por 255. Luego, normaliza estos valores para que estén en el rango de -1 a 1 restando 0.5 y dividiendo por 0.5. Finalmente, el código imprime los valores mínimos y máximos de los píxeles de las imágenes normalizadas y reescaladas.
10.1.3 Creación de Conjuntos de Entrenamiento y Validación
Para entrenar el modelo de difusión de manera efectiva, necesitamos dividir el conjunto de datos en conjuntos de entrenamiento y validación. El conjunto de entrenamiento se utilizará para entrenar el modelo, mientras que el conjunto de validación se utilizará para evaluar el rendimiento del modelo durante el entrenamiento.
Ejemplo: Creación de Conjuntos de Entrenamiento y Validación
from sklearn.model_selection import train_test_split
# Split the dataset into training and validation sets
train_images, val_images = train_test_split(images, test_size=0.2, random_state=42)
# Print the shape of the training and validation sets
print(f"Training set shape: {train_images.shape}")
print(f"Validation set shape: {val_images.shape}")
Este código utiliza la biblioteca Scikit-learn para dividir un conjunto de datos de imágenes en un conjunto de entrenamiento y un conjunto de validación. Reserva el 20% de las imágenes para validación (test_size=0.2) y el resto para entrenamiento. El parámetro 'random_state' se establece en 42, asegurando que la división sea la misma cada vez que se ejecute el código para reproducibilidad. Después de la división, imprime la forma (el número de imágenes y sus dimensiones) de los conjuntos de entrenamiento y validación.
10.1.4 Aumento de Datos
Para mejorar la capacidad de generalización del modelo de difusión, podemos aplicar técnicas de aumento de datos. El aumento de datos implica crear nuevas muestras de entrenamiento aplicando transformaciones aleatorias a las imágenes existentes, como rotaciones, volteos y desplazamientos. Esto ayuda al modelo a aprender a generar imágenes más diversas y robustas.
Ejemplo: Aumento de Datos
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# Define the data augmentation pipeline
datagen = ImageDataGenerator(
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True,
)
# Fit the data augmentation pipeline on the training data
datagen.fit(train_images)
# Example of applying data augmentation to a batch of images
for batch in datagen.flow(train_images, batch_size=9):
for i in range(9):
plt.subplot(330 + 1 + i)
plt.imshow((batch[i] * 0.5) + 0.5)
plt.show()
break
El código está utilizando la clase ImageDataGenerator de la biblioteca TensorFlow Keras para aumentar los datos de imagen. Inicialmente, configura una tubería con un conjunto específico de transformaciones: rotación de hasta 20 grados, desplazamientos horizontales y verticales de hasta un 20%, y volteo horizontal. Luego, ajusta esta tubería a las imágenes de entrenamiento.
Después de configurar el aumento de datos, aplica estas transformaciones a un lote de imágenes de muestra del conjunto de entrenamiento y visualiza las imágenes aumentadas. El aumento de datos ayuda a aumentar la diversidad de los datos de entrenamiento y a reducir el sobreajuste.
10.1 Recopilación y Preprocesamiento de Datos
En este capítulo, emprenderemos un emocionante proyecto para generar imágenes utilizando modelos de difusión. Este proyecto proporcionará una experiencia práctica con todo el flujo de trabajo de construir, entrenar y evaluar un modelo de difusión para la generación de imágenes. Al final de este capítulo, tendrás una comprensión completa de cómo aplicar modelos de difusión para crear imágenes de alta calidad a partir de ruido aleatorio.
Cubrirá los siguientes temas en este capítulo:
- Recopilación y Preprocesamiento de Datos
- Creación del Modelo
- Entrenamiento del Modelo
- Generación de Imágenes
- Evaluación del Modelo
Comencemos con el primer paso de nuestro proyecto: la recopilación y el preprocesamiento de datos.
El inicio de cualquier proyecto de aprendizaje automático invariablemente comienza con la recopilación y el preprocesamiento de los datos relevantes. En el contexto de nuestro proyecto actual, que se centra en la generación de imágenes, esto se traduce en la necesidad de un conjunto de datos completo de imágenes.
Esto es crucial ya que el modelo de difusión que estamos empleando aprende de este conjunto de datos para generar imágenes. Para obtener este conjunto de datos, utilizaremos un conjunto de datos de acceso público que abarca una amplia gama de imágenes. Sin embargo, el conjunto de datos sin procesar no se puede alimentar directamente en el modelo de difusión para fines de entrenamiento.
Requerirá una etapa de preprocesamiento, un proceso que implica limpiar, normalizar y posiblemente aumentar los datos para asegurar que estén en un formato óptimo para entrenar el modelo de difusión. Este paso es esencial ya que no solo mejora la eficiencia del proceso de entrenamiento del modelo, sino que también influye significativamente en la calidad de las imágenes generadas.
10.1.1 Recopilación de Datos de Imagen
Utilizaremos el conjunto de datos CIFAR-10, que es un conjunto de datos bien conocido que consiste en 60,000 imágenes en color de 32x32 en 10 clases diferentes. El conjunto de datos CIFAR-10 es ampliamente utilizado para entrenar y evaluar modelos de generación de imágenes.
Ejemplo: Cargando el Conjunto de Datos CIFAR-10
import tensorflow as tf
from tensorflow.keras.datasets import cifar10
# Load the CIFAR-10 dataset
(train_images, _), (test_images, _) = cifar10.load_data()
# Combine training and test images
images = np.concatenate([train_images, test_images], axis=0)
# Print the shape of the dataset
print(f"Dataset shape: {images.shape}")
Este código de ejemplo utiliza la biblioteca TensorFlow para cargar el conjunto de datos CIFAR-10, que es una colección de 60,000 imágenes en color de 32x32 en 10 clases, con 6,000 imágenes por clase. Hay 50,000 imágenes de entrenamiento y 10,000 imágenes de prueba.
El código combina las imágenes de entrenamiento y prueba en un solo conjunto de datos, y luego imprime la forma de este conjunto de datos combinado.
10.1.2 Normalización y Reescalado de Imágenes
Para asegurar que las imágenes estén en un formato adecuado para entrenar el modelo de difusión, necesitamos normalizarlas y reescalarlas. Normalizar las imágenes implica escalar los valores de los píxeles a un rango de [0, 1]. Además, reescalaremos las imágenes para asegurar que estén centradas alrededor de cero.
Ejemplo: Normalización y Reescalado de las Imágenes
# Normalize and rescale the images
images = images.astype('float32') / 255.0
images = (images - 0.5) / 0.5
# Print the range of pixel values
print(f"Pixel value range: [{images.min()}, {images.max()}]")
El código está normalizando y reescalando los valores de los píxeles de un arreglo de imágenes. Inicialmente, convierte los valores de los píxeles de enteros a flotantes y los escala entre 0 y 1 dividiendo por 255. Luego, normaliza estos valores para que estén en el rango de -1 a 1 restando 0.5 y dividiendo por 0.5. Finalmente, el código imprime los valores mínimos y máximos de los píxeles de las imágenes normalizadas y reescaladas.
10.1.3 Creación de Conjuntos de Entrenamiento y Validación
Para entrenar el modelo de difusión de manera efectiva, necesitamos dividir el conjunto de datos en conjuntos de entrenamiento y validación. El conjunto de entrenamiento se utilizará para entrenar el modelo, mientras que el conjunto de validación se utilizará para evaluar el rendimiento del modelo durante el entrenamiento.
Ejemplo: Creación de Conjuntos de Entrenamiento y Validación
from sklearn.model_selection import train_test_split
# Split the dataset into training and validation sets
train_images, val_images = train_test_split(images, test_size=0.2, random_state=42)
# Print the shape of the training and validation sets
print(f"Training set shape: {train_images.shape}")
print(f"Validation set shape: {val_images.shape}")
Este código utiliza la biblioteca Scikit-learn para dividir un conjunto de datos de imágenes en un conjunto de entrenamiento y un conjunto de validación. Reserva el 20% de las imágenes para validación (test_size=0.2) y el resto para entrenamiento. El parámetro 'random_state' se establece en 42, asegurando que la división sea la misma cada vez que se ejecute el código para reproducibilidad. Después de la división, imprime la forma (el número de imágenes y sus dimensiones) de los conjuntos de entrenamiento y validación.
10.1.4 Aumento de Datos
Para mejorar la capacidad de generalización del modelo de difusión, podemos aplicar técnicas de aumento de datos. El aumento de datos implica crear nuevas muestras de entrenamiento aplicando transformaciones aleatorias a las imágenes existentes, como rotaciones, volteos y desplazamientos. Esto ayuda al modelo a aprender a generar imágenes más diversas y robustas.
Ejemplo: Aumento de Datos
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# Define the data augmentation pipeline
datagen = ImageDataGenerator(
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True,
)
# Fit the data augmentation pipeline on the training data
datagen.fit(train_images)
# Example of applying data augmentation to a batch of images
for batch in datagen.flow(train_images, batch_size=9):
for i in range(9):
plt.subplot(330 + 1 + i)
plt.imshow((batch[i] * 0.5) + 0.5)
plt.show()
break
El código está utilizando la clase ImageDataGenerator de la biblioteca TensorFlow Keras para aumentar los datos de imagen. Inicialmente, configura una tubería con un conjunto específico de transformaciones: rotación de hasta 20 grados, desplazamientos horizontales y verticales de hasta un 20%, y volteo horizontal. Luego, ajusta esta tubería a las imágenes de entrenamiento.
Después de configurar el aumento de datos, aplica estas transformaciones a un lote de imágenes de muestra del conjunto de entrenamiento y visualiza las imágenes aumentadas. El aumento de datos ayuda a aumentar la diversidad de los datos de entrenamiento y a reducir el sobreajuste.
10.1 Recopilación y Preprocesamiento de Datos
En este capítulo, emprenderemos un emocionante proyecto para generar imágenes utilizando modelos de difusión. Este proyecto proporcionará una experiencia práctica con todo el flujo de trabajo de construir, entrenar y evaluar un modelo de difusión para la generación de imágenes. Al final de este capítulo, tendrás una comprensión completa de cómo aplicar modelos de difusión para crear imágenes de alta calidad a partir de ruido aleatorio.
Cubrirá los siguientes temas en este capítulo:
- Recopilación y Preprocesamiento de Datos
- Creación del Modelo
- Entrenamiento del Modelo
- Generación de Imágenes
- Evaluación del Modelo
Comencemos con el primer paso de nuestro proyecto: la recopilación y el preprocesamiento de datos.
El inicio de cualquier proyecto de aprendizaje automático invariablemente comienza con la recopilación y el preprocesamiento de los datos relevantes. En el contexto de nuestro proyecto actual, que se centra en la generación de imágenes, esto se traduce en la necesidad de un conjunto de datos completo de imágenes.
Esto es crucial ya que el modelo de difusión que estamos empleando aprende de este conjunto de datos para generar imágenes. Para obtener este conjunto de datos, utilizaremos un conjunto de datos de acceso público que abarca una amplia gama de imágenes. Sin embargo, el conjunto de datos sin procesar no se puede alimentar directamente en el modelo de difusión para fines de entrenamiento.
Requerirá una etapa de preprocesamiento, un proceso que implica limpiar, normalizar y posiblemente aumentar los datos para asegurar que estén en un formato óptimo para entrenar el modelo de difusión. Este paso es esencial ya que no solo mejora la eficiencia del proceso de entrenamiento del modelo, sino que también influye significativamente en la calidad de las imágenes generadas.
10.1.1 Recopilación de Datos de Imagen
Utilizaremos el conjunto de datos CIFAR-10, que es un conjunto de datos bien conocido que consiste en 60,000 imágenes en color de 32x32 en 10 clases diferentes. El conjunto de datos CIFAR-10 es ampliamente utilizado para entrenar y evaluar modelos de generación de imágenes.
Ejemplo: Cargando el Conjunto de Datos CIFAR-10
import tensorflow as tf
from tensorflow.keras.datasets import cifar10
# Load the CIFAR-10 dataset
(train_images, _), (test_images, _) = cifar10.load_data()
# Combine training and test images
images = np.concatenate([train_images, test_images], axis=0)
# Print the shape of the dataset
print(f"Dataset shape: {images.shape}")
Este código de ejemplo utiliza la biblioteca TensorFlow para cargar el conjunto de datos CIFAR-10, que es una colección de 60,000 imágenes en color de 32x32 en 10 clases, con 6,000 imágenes por clase. Hay 50,000 imágenes de entrenamiento y 10,000 imágenes de prueba.
El código combina las imágenes de entrenamiento y prueba en un solo conjunto de datos, y luego imprime la forma de este conjunto de datos combinado.
10.1.2 Normalización y Reescalado de Imágenes
Para asegurar que las imágenes estén en un formato adecuado para entrenar el modelo de difusión, necesitamos normalizarlas y reescalarlas. Normalizar las imágenes implica escalar los valores de los píxeles a un rango de [0, 1]. Además, reescalaremos las imágenes para asegurar que estén centradas alrededor de cero.
Ejemplo: Normalización y Reescalado de las Imágenes
# Normalize and rescale the images
images = images.astype('float32') / 255.0
images = (images - 0.5) / 0.5
# Print the range of pixel values
print(f"Pixel value range: [{images.min()}, {images.max()}]")
El código está normalizando y reescalando los valores de los píxeles de un arreglo de imágenes. Inicialmente, convierte los valores de los píxeles de enteros a flotantes y los escala entre 0 y 1 dividiendo por 255. Luego, normaliza estos valores para que estén en el rango de -1 a 1 restando 0.5 y dividiendo por 0.5. Finalmente, el código imprime los valores mínimos y máximos de los píxeles de las imágenes normalizadas y reescaladas.
10.1.3 Creación de Conjuntos de Entrenamiento y Validación
Para entrenar el modelo de difusión de manera efectiva, necesitamos dividir el conjunto de datos en conjuntos de entrenamiento y validación. El conjunto de entrenamiento se utilizará para entrenar el modelo, mientras que el conjunto de validación se utilizará para evaluar el rendimiento del modelo durante el entrenamiento.
Ejemplo: Creación de Conjuntos de Entrenamiento y Validación
from sklearn.model_selection import train_test_split
# Split the dataset into training and validation sets
train_images, val_images = train_test_split(images, test_size=0.2, random_state=42)
# Print the shape of the training and validation sets
print(f"Training set shape: {train_images.shape}")
print(f"Validation set shape: {val_images.shape}")
Este código utiliza la biblioteca Scikit-learn para dividir un conjunto de datos de imágenes en un conjunto de entrenamiento y un conjunto de validación. Reserva el 20% de las imágenes para validación (test_size=0.2) y el resto para entrenamiento. El parámetro 'random_state' se establece en 42, asegurando que la división sea la misma cada vez que se ejecute el código para reproducibilidad. Después de la división, imprime la forma (el número de imágenes y sus dimensiones) de los conjuntos de entrenamiento y validación.
10.1.4 Aumento de Datos
Para mejorar la capacidad de generalización del modelo de difusión, podemos aplicar técnicas de aumento de datos. El aumento de datos implica crear nuevas muestras de entrenamiento aplicando transformaciones aleatorias a las imágenes existentes, como rotaciones, volteos y desplazamientos. Esto ayuda al modelo a aprender a generar imágenes más diversas y robustas.
Ejemplo: Aumento de Datos
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# Define the data augmentation pipeline
datagen = ImageDataGenerator(
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True,
)
# Fit the data augmentation pipeline on the training data
datagen.fit(train_images)
# Example of applying data augmentation to a batch of images
for batch in datagen.flow(train_images, batch_size=9):
for i in range(9):
plt.subplot(330 + 1 + i)
plt.imshow((batch[i] * 0.5) + 0.5)
plt.show()
break
El código está utilizando la clase ImageDataGenerator de la biblioteca TensorFlow Keras para aumentar los datos de imagen. Inicialmente, configura una tubería con un conjunto específico de transformaciones: rotación de hasta 20 grados, desplazamientos horizontales y verticales de hasta un 20%, y volteo horizontal. Luego, ajusta esta tubería a las imágenes de entrenamiento.
Después de configurar el aumento de datos, aplica estas transformaciones a un lote de imágenes de muestra del conjunto de entrenamiento y visualiza las imágenes aumentadas. El aumento de datos ayuda a aumentar la diversidad de los datos de entrenamiento y a reducir el sobreajuste.
10.1 Recopilación y Preprocesamiento de Datos
En este capítulo, emprenderemos un emocionante proyecto para generar imágenes utilizando modelos de difusión. Este proyecto proporcionará una experiencia práctica con todo el flujo de trabajo de construir, entrenar y evaluar un modelo de difusión para la generación de imágenes. Al final de este capítulo, tendrás una comprensión completa de cómo aplicar modelos de difusión para crear imágenes de alta calidad a partir de ruido aleatorio.
Cubrirá los siguientes temas en este capítulo:
- Recopilación y Preprocesamiento de Datos
- Creación del Modelo
- Entrenamiento del Modelo
- Generación de Imágenes
- Evaluación del Modelo
Comencemos con el primer paso de nuestro proyecto: la recopilación y el preprocesamiento de datos.
El inicio de cualquier proyecto de aprendizaje automático invariablemente comienza con la recopilación y el preprocesamiento de los datos relevantes. En el contexto de nuestro proyecto actual, que se centra en la generación de imágenes, esto se traduce en la necesidad de un conjunto de datos completo de imágenes.
Esto es crucial ya que el modelo de difusión que estamos empleando aprende de este conjunto de datos para generar imágenes. Para obtener este conjunto de datos, utilizaremos un conjunto de datos de acceso público que abarca una amplia gama de imágenes. Sin embargo, el conjunto de datos sin procesar no se puede alimentar directamente en el modelo de difusión para fines de entrenamiento.
Requerirá una etapa de preprocesamiento, un proceso que implica limpiar, normalizar y posiblemente aumentar los datos para asegurar que estén en un formato óptimo para entrenar el modelo de difusión. Este paso es esencial ya que no solo mejora la eficiencia del proceso de entrenamiento del modelo, sino que también influye significativamente en la calidad de las imágenes generadas.
10.1.1 Recopilación de Datos de Imagen
Utilizaremos el conjunto de datos CIFAR-10, que es un conjunto de datos bien conocido que consiste en 60,000 imágenes en color de 32x32 en 10 clases diferentes. El conjunto de datos CIFAR-10 es ampliamente utilizado para entrenar y evaluar modelos de generación de imágenes.
Ejemplo: Cargando el Conjunto de Datos CIFAR-10
import tensorflow as tf
from tensorflow.keras.datasets import cifar10
# Load the CIFAR-10 dataset
(train_images, _), (test_images, _) = cifar10.load_data()
# Combine training and test images
images = np.concatenate([train_images, test_images], axis=0)
# Print the shape of the dataset
print(f"Dataset shape: {images.shape}")
Este código de ejemplo utiliza la biblioteca TensorFlow para cargar el conjunto de datos CIFAR-10, que es una colección de 60,000 imágenes en color de 32x32 en 10 clases, con 6,000 imágenes por clase. Hay 50,000 imágenes de entrenamiento y 10,000 imágenes de prueba.
El código combina las imágenes de entrenamiento y prueba en un solo conjunto de datos, y luego imprime la forma de este conjunto de datos combinado.
10.1.2 Normalización y Reescalado de Imágenes
Para asegurar que las imágenes estén en un formato adecuado para entrenar el modelo de difusión, necesitamos normalizarlas y reescalarlas. Normalizar las imágenes implica escalar los valores de los píxeles a un rango de [0, 1]. Además, reescalaremos las imágenes para asegurar que estén centradas alrededor de cero.
Ejemplo: Normalización y Reescalado de las Imágenes
# Normalize and rescale the images
images = images.astype('float32') / 255.0
images = (images - 0.5) / 0.5
# Print the range of pixel values
print(f"Pixel value range: [{images.min()}, {images.max()}]")
El código está normalizando y reescalando los valores de los píxeles de un arreglo de imágenes. Inicialmente, convierte los valores de los píxeles de enteros a flotantes y los escala entre 0 y 1 dividiendo por 255. Luego, normaliza estos valores para que estén en el rango de -1 a 1 restando 0.5 y dividiendo por 0.5. Finalmente, el código imprime los valores mínimos y máximos de los píxeles de las imágenes normalizadas y reescaladas.
10.1.3 Creación de Conjuntos de Entrenamiento y Validación
Para entrenar el modelo de difusión de manera efectiva, necesitamos dividir el conjunto de datos en conjuntos de entrenamiento y validación. El conjunto de entrenamiento se utilizará para entrenar el modelo, mientras que el conjunto de validación se utilizará para evaluar el rendimiento del modelo durante el entrenamiento.
Ejemplo: Creación de Conjuntos de Entrenamiento y Validación
from sklearn.model_selection import train_test_split
# Split the dataset into training and validation sets
train_images, val_images = train_test_split(images, test_size=0.2, random_state=42)
# Print the shape of the training and validation sets
print(f"Training set shape: {train_images.shape}")
print(f"Validation set shape: {val_images.shape}")
Este código utiliza la biblioteca Scikit-learn para dividir un conjunto de datos de imágenes en un conjunto de entrenamiento y un conjunto de validación. Reserva el 20% de las imágenes para validación (test_size=0.2) y el resto para entrenamiento. El parámetro 'random_state' se establece en 42, asegurando que la división sea la misma cada vez que se ejecute el código para reproducibilidad. Después de la división, imprime la forma (el número de imágenes y sus dimensiones) de los conjuntos de entrenamiento y validación.
10.1.4 Aumento de Datos
Para mejorar la capacidad de generalización del modelo de difusión, podemos aplicar técnicas de aumento de datos. El aumento de datos implica crear nuevas muestras de entrenamiento aplicando transformaciones aleatorias a las imágenes existentes, como rotaciones, volteos y desplazamientos. Esto ayuda al modelo a aprender a generar imágenes más diversas y robustas.
Ejemplo: Aumento de Datos
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# Define the data augmentation pipeline
datagen = ImageDataGenerator(
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True,
)
# Fit the data augmentation pipeline on the training data
datagen.fit(train_images)
# Example of applying data augmentation to a batch of images
for batch in datagen.flow(train_images, batch_size=9):
for i in range(9):
plt.subplot(330 + 1 + i)
plt.imshow((batch[i] * 0.5) + 0.5)
plt.show()
break
El código está utilizando la clase ImageDataGenerator de la biblioteca TensorFlow Keras para aumentar los datos de imagen. Inicialmente, configura una tubería con un conjunto específico de transformaciones: rotación de hasta 20 grados, desplazamientos horizontales y verticales de hasta un 20%, y volteo horizontal. Luego, ajusta esta tubería a las imágenes de entrenamiento.
Después de configurar el aumento de datos, aplica estas transformaciones a un lote de imágenes de muestra del conjunto de entrenamiento y visualiza las imágenes aumentadas. El aumento de datos ayuda a aumentar la diversidad de los datos de entrenamiento y a reducir el sobreajuste.