Función PyTorch torch.nn.RNN
Manual de referencia de PyTorch torch.nn
torch.nn.RNNEs el módulo básico de red neuronal recurrente en PyTorch.
Es la capa recurrente más simple, pero es propensa a enfrentar el problema del desvanecimiento del gradiente.
Definición de la función
torch.nn.RNN(input_size, hidden_size, num_layers=1, bias=True, batch_first=True, dropout=0, bidirectional=False)
Ejemplo de uso
Ejemplo 1: Uso básico
Ejemplo
import torch
import torch.nn as nn
rnn = nn.RNN(input_size=256, hidden_size=128, num_layers=2, batch_first=True)
x = torch.randn(4, 10, 256)
output, hidden = rnn(x)
print(Entrada:, x.shape)
print(Salida:, output.shape)
print(Estado oculto:, hidden.shape)
import torch.nn as nn
rnn = nn.RNN(input_size=256, hidden_size=128, num_layers=2, batch_first=True)
x = torch.randn(4, 10, 256)
output, hidden = rnn(x)
print(Entrada:, x.shape)
print(Salida:, output.shape)
print(Estado oculto:, hidden.shape)
Ejemplo 2: RNN multicapa
Ejemplo
import torch
import torch.nn as nn
# RNN de 3 capas, con dropout
rnn = nn.RNN(128, 256, num_layers=3, dropout=0.3, batch_first=True)
x = torch.randn(2, 50, 128)
out, h = rnn(x)
print(Entrada:, x.shape)
print(Salida:, out.shape)
print(Estado oculto:, h.shape) # (3, 2, 256)
import torch.nn as nn
# RNN de 3 capas, con dropout
rnn = nn.RNN(128, 256, num_layers=3, dropout=0.3, batch_first=True)
x = torch.randn(2, 50, 128)
out, h = rnn(x)
print(Entrada:, x.shape)
print(Salida:, out.shape)
print(Estado oculto:, h.shape) # (3, 2, 256)
Ejemplo 3: Activación no lineal
Ejemplo
import torch
import torch.nn as nn
# Por defecto se usa tanh como función de activación
rnn = nn.RNN(64, 64, batch_first=True)
x = torch.randn(1, 5, 64)
out, _ = rnn(x)
print(Forma de la salida:, out.shape)
print(RNN usa tanh como activación por defecto)
import torch.nn as nn
# Por defecto se usa tanh como función de activación
rnn = nn.RNN(64, 64, batch_first=True)
x = torch.randn(1, 5, 64)
out, _ = rnn(x)
print(Forma de la salida:, out.shape)
print(RNN usa tanh como activación por defecto)
Consideraciones
El RNN básico presenta el problema del desvanecimiento del gradiente; para secuencias largas se recomienda usar LSTM o GRU.
Casos de uso
- Tareas de secuencias simples: secuencias cortas
- Ejemplos didácticos: comprender los principios de RNN
- Prototipado rápido: línea base simple
Otras extensiones