텍스트용 RNN 모델 구축
PyBooks의 데이터 분석가로서 고객 상호작용, 시계열 데이터, 텍스트 문서처럼 순차적 정보가 담긴 데이터셋을 자주 다루게 됩니다. RNN은 이러한 데이터를 효과적으로 분석하고 인사이트를 추출하는 데 유용합니다. 이 연습 문제에서는 이미 전처리와 인코딩이 완료된 Newsgroup 데이터셋을 사용합니다. 이 데이터셋은 여러 범주의 글로 구성되어 있습니다. 여러분의 과제는 RNN을 적용해 다음 세 가지 범주로 기사를 분류하는 것입니다:
rec.autos, sci.med, 그리고 comp.graphics.
다음 모듈이 미리 로드되어 있습니다: torch, nn, optim.
또한 매개변수 input_size, hidden_size (32), num_layers (2), 그리고 num_classes가 사전에 로드되어 있습니다.
이 연습 문제 및 이후 연습 문제에서는 sklearn의 fetch_20newsgroups 데이터셋을 사용합니다.
이 연습은 강의의 일부입니다
PyTorch로 배우는 텍스트 딥러닝
연습 안내
- RNN 계층과 완전 연결 Linear 계층을 포함해 RNN 클래스를 완성하세요.
- 모델을 초기화하세요.
- 경사도를 초기화(zeroing)하면서 RNN 모델을 10 epoch 동안 학습하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# 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()}')