Introducció
Les Unitats recurrents amb porta (GRUs) són una variant de les xarxes neuronals recurrents (RNNs) dissenyades per abordar alguns dels problemes associats amb les RNNs tradicionals, com ara el gradient que desapareix. Les GRUs són similars a les Memòries a llarg termini (LSTM), però tenen una estructura més simple i menys paràmetres, cosa que les fa més eficients en termes de càlcul.
Conceptes clau
- Components de les GRUs
Les GRUs tenen dos components principals:
- Porta de restabliment (reset gate): Controla quanta informació del passat ha de ser oblidada.
- Porta de l'actualització (update gate): Decideix quanta informació del passat ha de ser transmesa al futur.
- Funcionament de les GRUs
Les GRUs combinen l'estat de la cel·la i l'estat ocult en una sola unitat, simplificant així el model. La fórmula matemàtica per a una GRU és la següent:
r_t = σ(W_r * [h_{t-1}, x_t]) z_t = σ(W_z * [h_{t-1}, x_t]) h'_t = tanh(W_h * [r_t * h_{t-1}, x_t]) h_t = (1 - z_t) * h_{t-1} + z_t * h'_t
On:
r_t
és la porta de restabliment.z_t
és la porta de l'actualització.h'_t
és l'estat candidat.h_t
és l'estat ocult actual.σ
és la funció sigmoide.tanh
és la funció tangencial hiperbòlica.
Implementació de GRUs amb TensorFlow
- Importar les llibreries necessàries
import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import GRU, Dense
- Preparar les dades
Per a aquest exemple, utilitzarem dades sintètiques. En un cas real, hauríem de carregar i pre-processar les dades adequadament.
import numpy as np # Generar dades sintètiques def generate_data(seq_length, num_samples): X = np.random.rand(num_samples, seq_length, 1) y = np.random.rand(num_samples, 1) return X, y seq_length = 10 num_samples = 1000 X, y = generate_data(seq_length, num_samples)
- Construir el model
model = Sequential() model.add(GRU(50, input_shape=(seq_length, 1))) model.add(Dense(1)) model.compile(optimizer='adam', loss='mse') model.summary()
- Entrenar el model
- Avaluar el model
Exercicis pràctics
Exercici 1: Construir una GRU per a la predicció de sèries temporals
- Carrega un conjunt de dades de sèries temporals (per exemple, dades de temperatura).
- Pre-processa les dades per a que siguin adequades per a una GRU.
- Construeix i entrena una GRU per predir els valors futurs de la sèrie temporal.
Exercici 2: Comparar GRUs amb LSTMs
- Construeix un model amb una LSTM per al mateix conjunt de dades de l'exercici anterior.
- Compara el rendiment de la GRU i la LSTM en termes de precisió i temps d'entrenament.
Solucions
Solució a l'Exercici 1
import pandas as pd # Carregar dades de temperatura data = pd.read_csv('temperature_data.csv') data = data['temperature'].values # Pre-processar les dades def create_sequences(data, seq_length): X, y = [], [] for i in range(len(data) - seq_length): X.append(data[i:i+seq_length]) y.append(data[i+seq_length]) return np.array(X), np.array(y) seq_length = 10 X, y = create_sequences(data, seq_length) X = X.reshape((X.shape[0], X.shape[1], 1)) # Construir el model model = Sequential() model.add(GRU(50, input_shape=(seq_length, 1))) model.add(Dense(1)) model.compile(optimizer='adam', loss='mse') model.summary() # Entrenar el model model.fit(X, y, epochs=20, batch_size=32) # Avaluar el model loss = model.evaluate(X, y) print(f'Loss: {loss}')
Solució a l'Exercici 2
# Construir el model amb LSTM model_lstm = Sequential() model_lstm.add(tf.keras.layers.LSTM(50, input_shape=(seq_length, 1))) model_lstm.add(Dense(1)) model_lstm.compile(optimizer='adam', loss='mse') model_lstm.summary() # Entrenar el model amb LSTM model_lstm.fit(X, y, epochs=20, batch_size=32) # Avaluar el model amb LSTM loss_lstm = model_lstm.evaluate(X, y) print(f'Loss LSTM: {loss_lstm}') # Comparar amb el model GRU loss_gru = model.evaluate(X, y) print(f'Loss GRU: {loss_gru}')
Conclusió
Les GRUs són una eina poderosa per treballar amb dades seqüencials, oferint una alternativa més simple i eficient a les LSTMs. En aquest tema, hem après sobre la seva estructura, el seu funcionament i com implementar-les amb TensorFlow. A més, hem realitzat exercicis pràctics per consolidar els coneixements adquirits. En el següent mòdul, explorarem tècniques avançades de TensorFlow per millorar encara més els nostres models.
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