テキスト用の RNN モデルを構築する
PyBooks のデータアナリストとして、顧客とのやり取り、時系列データ、テキスト文書などの時系列・系列データに頻繁に出会います。RNN はこのようなデータの分析とインサイト抽出に有効です。この演習では、すでに前処理とエンコードが済んだ Newsgroup データセットを扱います。データセットには複数カテゴリの記事が含まれています。あなたのタスクは、RNN を用いて以下の3カテゴリに記事を分類することです。
rec.autos、sci.med、comp.graphics
次のモジュールはあらかじめ読み込まれています: torch、nn、optim。
さらに、パラメータ input_size、hidden_size (32)、num_layers (2)、num_classes も事前に用意されています。
この演習および以降の演習では、sklearn の fetch_20newsgroups データセットを使用します。
この演習はコースの一部です
PyTorch で学ぶテキストの Deep Learning
演習の手順
- RNN クラスに RNN レイヤーと全結合の Linear レイヤーを追加して完成させます。
- モデルを初期化します。
- 勾配をゼロにしながら、RNN モデルを 10 エポック学習させます。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# 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()}')