El aumento de datos (data augmentation) es una técnica utilizada para incrementar la cantidad y diversidad de datos de entrenamiento sin recolectar nuevos datos. Esto se logra aplicando transformaciones aleatorias a los datos existentes, lo que ayuda a mejorar la generalización del modelo y a reducir el sobreajuste (overfitting).
Conceptos Clave
- Aumento de Datos: Proceso de crear nuevas muestras de datos a partir de las existentes mediante transformaciones.
- Transformaciones Comunes: Incluyen rotaciones, traslaciones, escalados, recortes, cambios de brillo y contraste, entre otros.
- Beneficios: Mejora la robustez del modelo, reduce el sobreajuste y puede mejorar la precisión del modelo.
Transformaciones Comunes
Transformación | Descripción |
---|---|
Rotación | Gira la imagen en un ángulo aleatorio. |
Traslación | Desplaza la imagen en una dirección específica. |
Escalado | Cambia el tamaño de la imagen. |
Recorte | Corta una parte de la imagen. |
Cambio de Brillo | Ajusta el brillo de la imagen. |
Cambio de Contraste | Ajusta el contraste de la imagen. |
Implementación en TensorFlow
TensorFlow proporciona varias herramientas para realizar aumento de datos, especialmente a través de la API tf.image
y tf.keras.preprocessing.image
.
Ejemplo Práctico
A continuación, se muestra un ejemplo de cómo aplicar aumento de datos utilizando tf.image
y tf.keras.preprocessing.image
.
Usando tf.image
import tensorflow as tf import matplotlib.pyplot as plt # Cargar una imagen de ejemplo image_path = tf.keras.utils.get_file('cat.jpg', 'https://storage.googleapis.com/download.tensorflow.org/example_images/320px-Felis_catus-cat_on_snow.jpg') image = tf.io.read_file(image_path) image = tf.image.decode_jpeg(image) # Aplicar transformaciones rotated_image = tf.image.rot90(image) flipped_image = tf.image.flip_left_right(image) bright_image = tf.image.adjust_brightness(image, delta=0.1) contrast_image = tf.image.adjust_contrast(image, contrast_factor=2) # Mostrar imágenes plt.figure(figsize=(10, 10)) plt.subplot(2, 2, 1) plt.title('Rotated Image') plt.imshow(rotated_image) plt.subplot(2, 2, 2) plt.title('Flipped Image') plt.imshow(flipped_image) plt.subplot(2, 2, 3) plt.title('Bright Image') plt.imshow(bright_image) plt.subplot(2, 2, 4) plt.title('Contrast Image') plt.imshow(contrast_image) plt.show()
Usando tf.keras.preprocessing.image
from tensorflow.keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img # Crear un generador de datos con aumento datagen = ImageDataGenerator( rotation_range=40, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip=True, fill_mode='nearest' ) # Cargar una imagen de ejemplo img = load_img(image_path) # Cargar imagen como PIL Image x = img_to_array(img) # Convertir a array Numpy x = x.reshape((1,) + x.shape) # Reconfigurar array # Generar imágenes aumentadas i = 0 for batch in datagen.flow(x, batch_size=1): plt.figure(i) imgplot = plt.imshow(array_to_img(batch[0])) i += 1 if i % 4 == 0: break plt.show()
Ejercicio Práctico
Ejercicio:
- Carga una imagen de tu elección.
- Aplica al menos tres transformaciones diferentes utilizando
tf.image
. - Muestra las imágenes originales y transformadas.
Solución:
import tensorflow as tf import matplotlib.pyplot as plt # Cargar una imagen de ejemplo image_path = 'ruta/a/tu/imagen.jpg' # Reemplaza con la ruta a tu imagen image = tf.io.read_file(image_path) image = tf.image.decode_jpeg(image) # Aplicar transformaciones rotated_image = tf.image.rot90(image) flipped_image = tf.image.flip_left_right(image) bright_image = tf.image.adjust_brightness(image, delta=0.1) # Mostrar imágenes plt.figure(figsize=(10, 10)) plt.subplot(2, 2, 1) plt.title('Original Image') plt.imshow(image) plt.subplot(2, 2, 2) plt.title('Rotated Image') plt.imshow(rotated_image) plt.subplot(2, 2, 3) plt.title('Flipped Image') plt.imshow(flipped_image) plt.subplot(2, 2, 4) plt.title('Bright Image') plt.imshow(bright_image) plt.show()
Errores Comunes y Consejos
-
Error Común: Aplicar transformaciones que distorsionen demasiado la imagen, haciendo que los datos aumentados no sean representativos de los datos reales.
- Consejo: Mantén las transformaciones dentro de un rango razonable para asegurar que las imágenes aumentadas sean útiles para el entrenamiento.
-
Error Común: No aplicar aumento de datos de manera consistente durante el entrenamiento y la validación.
- Consejo: Asegúrate de aplicar las mismas transformaciones de aumento de datos durante el entrenamiento y la validación para mantener la consistencia.
Conclusión
El aumento de datos es una técnica poderosa para mejorar la robustez y la generalización de los modelos de aprendizaje automático. TensorFlow proporciona herramientas flexibles y fáciles de usar para implementar aumento de datos, lo que permite a los desarrolladores mejorar sus modelos sin necesidad de recolectar más datos. En el próximo módulo, exploraremos cómo trabajar con conjuntos de datos en TensorFlow para construir pipelines de datos eficientes.
Curso de TensorFlow
Módulo 1: Introducción a TensorFlow
- ¿Qué es TensorFlow?
- Configuración de TensorFlow
- Conceptos Básicos de TensorFlow
- Hola Mundo en TensorFlow
Módulo 2: Fundamentos de TensorFlow
Módulo 3: Manejo de Datos en TensorFlow
Módulo 4: Construcción de Redes Neuronales
- Introducción a Redes Neuronales
- Creando una Red Neuronal Simple
- Funciones de Activación
- Funciones de Pérdida y Optimizadores
Módulo 5: Redes Neuronales Convolucionales (CNNs)
Módulo 6: Redes Neuronales Recurrentes (RNNs)
- Introducción a RNNs
- Construyendo una RNN
- Memoria a Largo Plazo (LSTM)
- Unidades Recurrentes Gated (GRUs)
Módulo 7: Técnicas Avanzadas de TensorFlow
- Capas y Modelos Personalizados
- TensorFlow Hub
- Aprendizaje por Transferencia
- Ajuste de Hiperparámetros