Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

TensorFlow desde cero, Unidad 9 — Uso de TensorFlow con distintos tipos de datos, 9.2 — Introducción a imágenes y secuencias ·

Preparación para CNN y RNN

Preparación para CNN y RNN

Introducción

En el mundo de la Inteligencia Artificial, las imágenes y secuencias de datos son dos tipos fundamentales que requieren técnicas específicas para su análisis. La Convolutional Neural Network (CNN) es particularmente efectiva para procesar imágenes, ya que está diseñada para capturar características locales en una forma visual. Por otro lado, las Recurrent Neural Networks (RNN) y sus variantes, como Long Short-Term Memory (LSTM), son ideales para manejar secuencias de datos, donde el contexto temporal es crucial.

En esta unidad, exploraremos cómo preparar tus datos para trabajar con CNNs y RNNs en TensorFlow. Aprenderás a transformar tus datos tabulares o no estructurados en tensores adecuados, así como a configurar pipelines de datos eficientes para mejorar el rendimiento del entrenamiento.

Explicación principal

Preparación de imágenes para CNN

Las imágenes se representan en formato tensorial con tres dimensiones: altura, ancho y canal (RGB). Para que las CNNs puedan procesarlas correctamente, los datos deben estar normalizados e inyectados en el modelo adecuadamente.

import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator

# Definir la estructura del dataset
train_datagen = ImageDataGenerator(rescale=1./255,
                                   rotation_range=40,
                                   width_shift_range=0.2,
                                   height_shift_range=0.2,
                                   shear_range=0.2,
                                   zoom_range=0.2,
                                   horizontal_flip=True)

# Cargar el dataset
train_generator = train_datagen.flow_from_directory(
        'data/train',  # Ruta de la carpeta con los datos de entrenamiento
        target_size=(150, 150),  # Tamaño del tensor
        batch_size=32,
        class_mode='binary')  # Clase binaria para clasificación binaria

# Ejemplo de uso en un modelo CNN
model = tf.keras.models.Sequential([
    tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)),
    tf.keras.layers.MaxPooling2D(2, 2),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.fit(train_generator, epochs=30)

Preparación de secuencias para RNN

Las secuencias son series temporales o secuencias de texto que requieren un manejo especial. En RNNs y LSTM, la información se procesa en orden temporal.

import tensorflow as tf
from tensorflow.keras.preprocessing.sequence import pad_sequences

# Ejemplo con secuencias numéricas
data = [[1, 2], [3, 4], [5]]
padded_data = pad_sequences(data, maxlen=5, padding='post')

# Ejemplo con secuencia de texto
from tensorflow.keras.preprocessing.text import Tokenizer

tokenizer = Tokenizer(num_words=100)
tokenizer.fit_on_texts(['Esta es una frase', 'Otra frase de ejemplo'])
sequences = tokenizer.texts_to_sequences(['Esta es una frase', 'Otra frase de ejemplo'])

# Ejemplo de uso en un modelo LSTM
model = tf.keras.models.Sequential([
    tf.keras.layers.Embedding(input_dim=100, output_dim=64),
    tf.keras.layers.LSTM(32, return_sequences=True),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(1)
])
model.compile(optimizer='adam', loss='mse')
model.fit(padded_data, epochs=10)

Errores típicos / trampas

  1. No normalizar datos: Las imágenes no normalizadas o incoherentes pueden llevar a malas predicciones y un rendimiento inferior.
  2. Recortar o estirar imágenes de manera incorrecta: Esto puede distorsionar las características relevantes en la imagen, afectando al rendimiento del modelo.
  3. No preprocesar secuencias adecuadamente: Las secuencias no preprocesadas pueden llevar a una mala representación y rendimiento insuficiente.

Checklist accionable

  1. Normaliza tus datos de entrada para asegurar consistencia en el rango.
  2. Verifica que la resolución y aspecto (altura, ancho, canal) coincidan con las expectativas del modelo CNN.
  3. Preprocesa tus secuencias según sea necesario, utilizando técnicas como padding o truncamiento.
  4. Valida tus datos de validación con el mismo proceso de preprocesado que los datos de entrenamiento.
  5. Asegúrate de que todos los tensores tengan la misma forma y tipo.

Siguientes pasos

  • Explorar más sobre CNNs: Aprende a implementar diferentes capas convolucionales y técnicas avanzadas como dropout para mejorar el rendimiento.
  • Ejercicios prácticos: Trabaja con datasets de imágenes reales y diseña modelos personalizados para clasificación y detección.
  • Proyectos de RNNs: Implementa modelos LSTM o GRU en secuencias de texto o series temporales.

Siguiendo estos pasos, estás preparado para abordar desafíos avanzados en el procesamiento de imágenes y secuencias con TensorFlow.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).