Pytorch LSTM không đào tạo

Sep 22 2020

Vì vậy, tôi hiện đang cố gắng triển khai LSTM trên Pytorch, nhưng vì một số lý do mà mức lỗ không giảm. Đây là mạng của tôi:

class MyNN(nn.Module):
    def __init__(self, input_size=3, seq_len=107, pred_len=68, hidden_size=50, num_layers=1, dropout=0.2):
        super().__init__()
        
        self.pred_len = pred_len
        
        self.rnn = nn.LSTM(
            input_size=input_size, 
            hidden_size=hidden_size, 
            num_layers=num_layers, 
            dropout=dropout, 
            bidirectional=True,
            batch_first=True
        )
        
        self.linear = nn.Linear(hidden_size*2, 5)
    
    def forward(self, X):
        lstm_output, (hidden_state, cell_state) = self.rnn(X)
        
        labels = self.linear(lstm_output[:, :self.pred_len, :])
        
        return lstm_output, labels

Và vòng lặp đào tạo của tôi

LEARNING_RATE = 1e-2


net = MyNN(num_layers=1, dropout=0)

compute_loss = nn.MSELoss()

optimizer = optim.Adam(net.parameters(), lr=LEARNING_RATE)


all_loss = []
for data in tqdm(list(train_loader)):
    X, y = data
    
    optimizer.zero_grad()

    lstm_output, output = net(X.float())
    
    # Computing the loss
    loss = compute_loss(y, output)
    all_loss.append(loss)
    loss.backward()
    
    optimizer.step()
    
# Plot
plt.plot(all_loss, marker=".")
plt.xlabel("Epoch")
plt.xlabel("Loss")
plt.show()

Và đây là những gì tôi có

Tôi đã cố gắng tìm kiếm xem tôi đã làm sai cái quái gì nhưng tôi không biết. Ngoài ra, trước khi tôi sử dụng keras LSTM và nó hoạt động tốt trên tập dữ liệu.

Bất kỳ giúp đỡ? Cảm ơn!

Trả lời

1 YuseqYaseq Sep 22 2020 at 20:10

Bạn nhìn vào lỗ ở mỗi đợt. Bạn nên tính trung bình khoản lỗ của mình cho tất cả các đợt. Khi bạn nhìn vào các lô khác nhau, khoản lỗ của bạn có thể tăng lên chỉ đơn giản là vì một lô khó dự đoán hơn lô còn lại. Đó là lý do tại sao nó không thực sự có thể giải thích được. Vì vậy, hãy bắt đầu với điều đó. Nếu sự cố vẫn tiếp diễn, nó có thể phát nổ các gradient. Trong trường hợp đó giảm tỷ lệ học của bạn để 1e-3hoặc 1e-4hoặc thậm chí ít hơn nếu nó tiếp tục.