Aan de slagGa gratis aan de slag

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

Cursus bekijken

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_seq door het model te sturen.
  • Bereken de loss op basis van de voorspelde outputs en 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()}')
Code bewerken en uitvoeren