Pytorch LSTM không đào tạo
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
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.