.

martes, 13 de febrero de 2024

RNN: Desarrollo de ejemplos prácticos

 


Implementar una Red Neuronal Recurrente (RNN) utilizando Python y la librería Keras es una excelente forma de comenzar a explorar el potencial de estas redes para procesar secuencias de datos. A continuación, presentaré dos ejemplos básicos de aplicación que ilustran cómo se pueden utilizar las RNN para tareas de predicción de series temporales y procesamiento de lenguaje natural (PLN).

1. Predicción de Series Temporales

Un ejemplo clásico de aplicación de las RNN es la predicción de series temporales, como predecir la temperatura futura basándose en un conjunto de datos históricos.

```python

import numpy as np

from keras.models import Sequential

from keras.layers import SimpleRNN, Dense

from keras.optimizers import Adam

# Supongamos que X_train y y_train son tus datos de entrenamiento,

# donde X_train es un array de forma (num_samples, num_timesteps, num_features)

# e y_train es un array de forma (num_samples, num_output_features).

model = Sequential()

model.add(SimpleRNN(50, activation='relu', return_sequences=True, input_shape=(X_train.shape[1], X_train.shape[2])))

model.add(SimpleRNN(50, activation='relu'))

model.add(Dense(1))

model.compile(optimizer=Adam(lr=0.001), loss='mean_squared_error')

model.fit(X_train, y_train, epochs=100, batch_size=32, validation_split=0.2)

```

Este código define una RNN simple con dos capas `SimpleRNN` seguidas por una capa `Dense` para realizar predicciones de valores continuos. La forma de los datos de entrada (`input_shape`) debe especificarse según la estructura de tu serie temporal (número de pasos temporales y características por paso).

2. Procesamiento de Lenguaje Natural: Clasificación de Texto

Las RNN también se utilizan ampliamente en PLN. Un ejemplo sería clasificar reseñas de películas en positivas o negativas utilizando los comentarios de texto.

```python

import numpy as np

from keras.preprocessing import sequence

from keras.models import Sequential

from keras.layers import Embedding, SimpleRNN, Dense

from keras.datasets import imdb

# Cargar datos de IMDB

max_features = 10000  # Número de palabras más frecuentes a considerar

maxlen = 500  # Cortar textos después de este número de palabras

batch_size = 32

(input_train, y_train), (input_test, y_test) = imdb.load_data(num_words=max_features)

# Preprocesamiento

input_train = sequence.pad_sequences(input_train, maxlen=maxlen)

input_test = sequence.pad_sequences(input_test, maxlen=maxlen)

# Definir el modelo

model = Sequential()

model.add(Embedding(max_features, 32))

model.add(SimpleRNN(32))

model.add(Dense(1, activation='sigmoid'))

model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc'])

# Entrenamiento

model.fit(input_train, y_train, epochs=10, batch_size=128, validation_split=0.2)

```

Este código utiliza el conjunto de datos `imdb` de Keras, que ya está preprocesado (las reseñas de películas han sido convertidas a secuencias de índices de palabras). Primero, se realiza un preprocesamiento adicional para asegurar que todas las secuencias tengan la misma longitud. Luego, se construye el modelo utilizando una capa `Embedding` para convertir los índices de palabras en vectores densos, seguido por una capa `SimpleRNN` para procesar la secuencia de vectores, y finalmente una capa `Dense` para la clasificación.

Notas Finales

Ambos ejemplos demuestran cómo implementar y entrenar una RNN básica para tareas comunes de aprendizaje automático. Es importante adaptar la arquitectura, el número de capas, y los hiperparámetros del modelo según la complejidad de la tarea y la naturaleza de los datos. Keras facilita la experimentación con diferentes configuraciones de manera intuitiva y eficiente.

No hay comentarios:

Publicar un comentario