Aan de slagGa gratis aan de slag

Een RNN-model voor tekst bouwen

Als data-analist bij PyBooks kom je vaak gegevenssets tegen met sequentiële informatie, zoals klantinteracties, tijdreeksen of tekstdocumenten. RNN's kunnen dit soort data effectief analyseren en inzichten opleveren. In deze oefening duik je in de Newsgroup-gegevensset die al voor je is verwerkt en gecodeerd. Deze gegevensset bevat artikelen uit verschillende categorieën. Jouw taak is om een RNN toe te passen om deze artikelen in drie categorieën te classificeren:

rec.autos, sci.med en comp.graphics.

Het volgende is voor je geladen: torch, nn, optim.

Daarnaast zijn de parameters input_size, hidden_size (32), num_layers (2) en num_classes al voor je klaargezet.

Deze en de volgende oefeningen gebruiken de fetch_20newsgroups-gegevensset uit sklearn.

Deze oefening maakt deel uit van de cursus

Deep Learning voor tekst met PyTorch

Cursus bekijken

Oefeninstructies

  • Vul de RNN-klasse aan met een RNN-laag en een volledig verbonden linear-laag.
  • Initialiseer het model.
  • Train het RNN-model tien epochs door de gradiënten op nul te zetten.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

# Complete the RNN class
class RNNModel(nn.Module):
    def __init__(self, input_size, hidden_size, num_layers, num_classes):
        super(RNNModel, self).__init__()
        self.hidden_size = hidden_size
        self.num_layers = num_layers
        self.rnn = ____.____(input_size, hidden_size, num_layers, batch_first=True)
        self.fc = ____.____(hidden_size, num_classes)        
    def forward(self, x):
        h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size)
        out, _ = self.rnn(x, h0)
        out = out[:, -1, :] 
        out = self.fc(out)
        return out

# Initialize the model
rnn_model = ____(input_size, hidden_size, num_layers, num_classes)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(rnn_model.parameters(), lr=0.01)

# Train the model for ten epochs and zero the gradients
for epoch in ____: 
    optimizer.____()
    outputs = ____(X_train_seq)
    loss = criterion(outputs, y_train_seq)
    loss.backward()
    optimizer.step()
    print(f'Epoch: {epoch+1}, Loss: {loss.item()}')
Code bewerken en uitvoeren