ÎncepețiÎncepe gratuit

Construirea unui model RNN pentru text

În calitate de analist de date la PyBooks, întâlnești frecvent seturi de date care conțin informații secvențiale, cum ar fi interacțiunile cu clienții, date de tip serie temporală sau documente text. Rețelele neuronale recurente (RNN) pot analiza eficient astfel de date și pot extrage informații valoroase din ele. În acest exercițiu, vei lucra cu setul de date Newsgroup, care a fost deja procesat și codificat pentru tine. Acesta conține articole din diferite categorii. Sarcina ta este să aplici un RNN pentru a clasifica aceste articole în trei categorii:

rec.autos, sci.med și comp.graphics.

Au fost încărcate pentru tine: torch, nn, optim.

De asemenea, parametrii input_size, hidden_size (32), num_layers (2) și num_classes au fost preîncărcați pentru tine.

Acest exercițiu și cele care urmează folosesc setul de date fetch_20newsgroups din sklearn.

Acest exercițiu face parte din cursul

Deep Learning pentru text cu PyTorch

Vezi cursul

Instrucțiuni pentru exercițiu

  • Completează clasa RNN cu un strat RNN și un strat liniar complet conectat.
  • Inițializează modelul.
  • Antrenează modelul RNN pentru zece epoci, anulând gradienții la fiecare pas.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

# 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()}')
Editează și rulează codul