Crear un modelo LSTM para texto
En PyBooks, el equipo busca constantemente mejorar la experiencia de usuario aprovechando los últimos avances tecnológicos. En esta línea, te han asignado una tarea clave. Quieren que explores el potencial de otra herramienta potente: LSTM, conocida por capturar mayores complejidades en los patrones de datos. Estás trabajando con el mismo conjunto de datos de Newsgroups, y el objetivo sigue siendo el mismo: clasificar artículos de noticias en tres categorías distintas:
rec.autos, sci.med y comp.graphics.
Ya tienes cargados los siguientes paquetes: torch, nn, optim.
Este ejercicio forma parte del curso
Deep Learning para texto con PyTorch
Instrucciones del ejercicio
- Configura un modelo LSTM completando las capas LSTM y lineal con los parámetros necesarios.
- Inicializa el modelo con los parámetros necesarios.
- Entrena el modelo LSTM restableciendo los gradientes a cero y pasando los datos de entrada
X_train_seqa través del modelo. - Calcula la pérdida a partir de los
outputspredichos y las etiquetas verdaderas.
ejercicio interactivo práctico
Prueba este ejercicio completando este código de ejemplo.
# Initialize the LSTM and the output layer with parameters
class LSTMModel(nn.Module):
def __init__(self, input_size, hidden_size, num_layers, num_classes):
super(LSTMModel, self).__init__()
self.hidden_size = hidden_size
self.num_layers = num_layers
self.lstm = nn.LSTM(____, ____, ____, batch_first=True)
self.fc = nn.Linear(____, ____)
def forward(self, x):
h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size)
c0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size)
out, _ = self.lstm(x, (h0, c0))
out = out[:, -1, :]
out = self.fc(out)
return out
# Initialize model with required parameters
lstm_model = LSTMModel(____, ____, ____, ____)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(lstm_model.parameters(), lr=0.01)
# Train the model by passing the correct parameters and zeroing the gradient
for epoch in range(10):
optimizer.____
outputs = lstm_model(____)
loss = criterion(____, y_train_seq)
loss.backward()
optimizer.step()
print(f'Epoch: {epoch+1}, Loss: {loss.item()}')