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.
- 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.
- 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
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]}")
- 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.
Curs de TensorFlow
Mòdul 1: Introducció a TensorFlow
- Què és TensorFlow?
- Configuració de TensorFlow
- Conceptes bàsics de TensorFlow
- Hola món amb TensorFlow
Mòdul 2: Conceptes bàsics de TensorFlow
Mòdul 3: Gestió de dades a TensorFlow
Mòdul 4: Construcció de xarxes neuronals
- Introducció a les xarxes neuronals
- Creació d'una xarxa neuronal simple
- Funcions d'activació
- Funcions de pèrdua i optimitzadors
Mòdul 5: Xarxes neuronals convolucionals (CNNs)
Mòdul 6: Xarxes neuronals recurrents (RNNs)
- Introducció a les RNNs
- Construcció d'una RNN
- Memòria a llarg termini (LSTM)
- Unitats recurrents amb porta (GRUs)
Mòdul 7: Tècniques avançades de TensorFlow
- Capes i models personalitzats
- TensorFlow Hub
- Aprenentatge per transferència
- Ajust de hiperparàmetres