Een LSTM-model voor tekst bouwen
Bij PyBooks is het team voortdurend bezig de gebruikerservaring te verbeteren door de nieuwste technologische ontwikkelingen te benutten. In lijn met die visie hebben ze jou een belangrijke taak gegeven. Het team wil dat je het potentieel verkent van een ander krachtig hulpmiddel: LSTM, bekend om het vastleggen van meer complexiteit in datapatronen. Je werkt met dezelfde Newsgroup-gegevensset, met hetzelfde doel: nieuwsartikelen indelen in drie categorieën:
rec.autos, sci.med en comp.graphics.
De volgende pakketten zijn voor je geladen: torch, nn, optim.
Deze oefening maakt deel uit van de cursus
Deep Learning voor tekst met PyTorch
Oefeninstructies
- Richt een LSTM-model in door de LSTM- en lineaire lagen aan te vullen met de benodigde parameters.
- Initialiseer het model met de benodigde parameters.
- Train het LSTM-model door de gradients te resetten naar nul en de invoergegevens
X_train_seqdoor het model te sturen. - Bereken de loss op basis van de voorspelde
outputsen de echte labels.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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()}')