Bắt đầu ngayBắt đầu miễn phí

Huấn luyện và kiểm thử mô hình RNN với attention

Tại PyBooks, nhóm trước đó đã xây dựng một mô hình RNN dự đoán từ mà không có cơ chế attention. Mô hình ban đầu này, gọi là rnn_model, đã được huấn luyện và phiên bản của nó đã được nạp sẵn. Nhiệm vụ của bạn bây giờ là huấn luyện RNNWithAttentionModel mới và so sánh dự đoán của nó với rnn_model trước đó.

Những nội dung sau đã được nạp sẵn cho bạn:

  • inputs: danh sách các chuỗi đầu vào dưới dạng tensor
  • targets: tensor chứa các từ mục tiêu cho mỗi chuỗi đầu vào
  • optimizer: hàm tối ưu Adam
  • criterion: hàm CrossEntropyLoss
  • pad_sequences: hàm đệm (pad) các chuỗi đầu vào để tạo batch
  • attention_model: lớp mô hình đã định nghĩa từ bài trước
  • rnn_model: mô hình RNN đã được nhóm PyBooks huấn luyện

Bài tập này là một phần của khóa học

Deep Learning cho Văn bản với PyTorch

Xem khóa học

Hướng dẫn bài tập

  • Đặt mô hình RNN về chế độ đánh giá trước khi kiểm thử với dữ liệu kiểm thử.
  • Lấy đầu ra của RNN bằng cách đưa đầu vào phù hợp vào mô hình RNN.
  • Trích xuất từ có điểm dự đoán cao nhất từ đầu ra của RNN.
  • Tương tự, với mô hình attention, trích xuất từ có điểm dự đoán cao nhất từ đầu ra của attention.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

for epoch in range(epochs):
    attention_model.train()
    optimizer.zero_grad()
    padded_inputs = pad_sequences(inputs)
    outputs = attention_model(padded_inputs)
    loss = criterion(outputs, targets)
    loss.backward()
    optimizer.step()

for input_seq, target in zip(input_data, target_data):
    input_test = torch.tensor(input_seq, dtype=torch.long).unsqueeze(0)
   	
    #  Set the RNN model to evaluation mode
    rnn_model.____()
    # Get the RNN output by passing the appropriate input 
    rnn_output = ____(____)
    # Extract the word with the highest prediction score 
    rnn_prediction = ix_to_word[torch.____(____).item()]

    attention_model.eval()
    attention_output = attention_model(input_test)
    # Extract the word with the highest prediction score
    attention_prediction = ix_to_word[torch.____(____).item()]

    print(f"\nInput: {' '.join([ix_to_word[ix] for ix in input_seq])}")
    print(f"Target: {ix_to_word[target]}")
    print(f"RNN prediction: {rnn_prediction}")
    print(f"RNN with Attention prediction: {attention_prediction}")
Chỉnh sửa và Chạy Mã