En aquest tema, aprendrem a construir una Xarxa Neuronal Recurrent (RNN) utilitzant TensorFlow. Les RNNs són especialment útils per a tasques que impliquen dades seqüencials, com ara el processament de llenguatge natural, la predicció de sèries temporals i la generació de text.

Objectius

  • Entendre la estructura bàsica d'una RNN.
  • Aprendre a construir una RNN simple amb TensorFlow.
  • Implementar una RNN per a una tasca de predicció de sèries temporals.

  1. Estructura bàsica d'una RNN

Una RNN és una xarxa neuronal que té connexions recurrents, és a dir, connexions que permeten que la sortida d'una capa es retroalimenti com a entrada per a la mateixa capa en el següent pas temporal. Això permet que la xarxa tingui una "memòria" dels passos anteriors.

Components clau d'una RNN:

  • Unitat recurrent: La unitat bàsica que processa una entrada en cada pas temporal.
  • Estat ocult: La memòria de la xarxa que es manté i s'actualitza en cada pas temporal.
  • Sortida: La predicció o resultat de la xarxa en cada pas temporal.

  1. Construcció d'una RNN simple amb TensorFlow

Pas 1: Importar les llibreries necessàries

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import SimpleRNN, Dense
import numpy as np

Pas 2: Preparar les dades

Per a aquest exemple, utilitzarem una seqüència sintètica simple per a la predicció de sèries temporals.

# Generar dades sintètiques
def generate_data(seq_length, num_samples):
    X = []
    y = []
    for _ in range(num_samples):
        start = np.random.rand()
        sequence = np.array([start + i * 0.1 for i in range(seq_length)])
        X.append(sequence[:-1])
        y.append(sequence[-1])
    return np.array(X), np.array(y)

seq_length = 10
num_samples = 1000
X, y = generate_data(seq_length, num_samples)

# Reshape per a RNN (samples, timesteps, features)
X = X.reshape((X.shape[0], X.shape[1], 1))

Pas 3: Construir el model

model = Sequential()
model.add(SimpleRNN(50, activation='relu', input_shape=(seq_length-1, 1)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')

Pas 4: Entrenar el model

model.fit(X, y, epochs=20, batch_size=32)

Pas 5: Avaluar el model

# Generar noves dades per a la validació
X_test, y_test = generate_data(seq_length, 100)
X_test = X_test.reshape((X_test.shape[0], X_test.shape[1], 1))

# Predir
predictions = model.predict(X_test)

# Comparar prediccions amb valors reals
for i in range(5):
    print(f"Predicció: {predictions[i][0]}, Valor real: {y_test[i]}")

  1. Exercici pràctic

Exercici 1: Millorar la RNN

Prova de millorar la precisió de la RNN ajustant els hiperparàmetres següents:

  • Nombre de neurones a la capa SimpleRNN.
  • Nombre d'epochs.
  • Mida del batch.

Solució suggerida

model = Sequential()
model.add(SimpleRNN(100, activation='relu', input_shape=(seq_length-1, 1)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')

model.fit(X, y, epochs=50, batch_size=16)

Conclusió

En aquest tema, hem après a construir una RNN simple utilitzant TensorFlow. Hem vist com preparar les dades, construir el model, entrenar-lo i avaluar-lo. Les RNNs són molt potents per a tasques que impliquen dades seqüencials, i amb TensorFlow, podem construir i entrenar aquests models de manera eficient. En el següent tema, explorarem les memòries a llarg termini (LSTM), una variant de les RNNs que aborda alguns dels seus problemes comuns.

© Copyright 2024. Tots els drets reservats