Pytorch LSTM tidak berlatih
Jadi saya saat ini mencoba menerapkan LSTM di Pytorch, tetapi karena alasan tertentu kerugiannya tidak berkurang. Ini jaringan saya:
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
Dan lingkaran pelatihan saya
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()
Dan inilah yang saya dapatkan
Saya telah mencoba untuk mencari apa yang saya lakukan salah tapi saya tidak tahu. Juga, sebelum saya menggunakan keras LSTM dan itu bekerja dengan baik pada dataset.
Ada bantuan? Terima kasih!
Jawaban
Anda melihat kerugian di setiap kelompok. Anda harus menghitung rata-rata kerugian Anda di semua kelompok. Ketika Anda melihat batch yang berbeda, kerugian Anda mungkin meningkat hanya karena satu batch lebih sulit untuk diprediksi daripada yang lain. Itulah mengapa itu tidak bisa ditafsirkan. Jadi mulailah dengan itu. Jika masalah berlanjut, kemungkinan gradien meledak. Dalam hal menurunkan tingkat belajar untuk 1e-3atau 1e-4atau bahkan kurang jika terus.