LoslegenKostenlos loslegen

Ein RNN-Modell für Text bauen

Als Data Analyst bei PyBooks begegnest du oft Datensätzen mit sequentiellen Informationen, zum Beispiel Kundeninteraktionen, Zeitreihendaten oder Textdokumente. RNNs können solche Daten effektiv analysieren und Erkenntnisse daraus gewinnen. In dieser Übung tauchst du in den Newsgroup-Datensatz ein, der bereits für dich verarbeitet und codiert wurde. Dieser Datensatz umfasst Artikel aus verschiedenen Kategorien. Deine Aufgabe ist es, ein RNN anzuwenden, um diese Artikel in drei Kategorien einzuordnen:

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

Folgendes wurde für dich geladen: torch, nn, optim.

Zusätzlich wurden die Parameter input_size, hidden_size (32), num_layers (2) und num_classes für dich vorbelegt.

Diese und die folgenden Übungen verwenden den Datensatz fetch_20newsgroups aus sklearn.

Diese Übung ist Teil des Kurses

Deep Learning für Text mit PyTorch

Kurs anzeigen

Anleitung zur Übung

  • Vervollständige die RNN-Klasse mit einer RNN-Schicht und einer voll verbundenen Linear-Schicht.
  • Initialisiere das Modell.
  • Trainiere das RNN-Modell zehn Epochen lang, indem du die Gradienten auf Null setzt.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

# 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 bearbeiten und ausführen