Pytorch LSTM trainiert nicht
Ich versuche derzeit, ein LSTM auf Pytorch zu implementieren, aber aus irgendeinem Grund nimmt der Verlust nicht ab. Hier ist mein Netzwerk:
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
Und meine Trainingsschleife
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()
Und das habe ich bekommen
Ich habe versucht herauszufinden, was zum Teufel ich falsch mache, aber ich habe keine Ahnung. Außerdem habe ich vorher ein Keras LSTM verwendet und es hat gut mit dem Datensatz funktioniert.
Irgendeine Hilfe? Vielen Dank!
Antworten
Sie betrachten den Verlust bei jeder Charge. Sie sollten Ihren Verlust über alle Chargen mitteln. Wenn Sie sich verschiedene Chargen ansehen, kann sich Ihr Verlust einfach erhöhen, weil eine Charge schwerer vorherzusagen ist als die andere. Deshalb ist es nicht wirklich interpretierbar. Beginnen Sie also damit. Wenn das Problem weiterhin besteht, explodieren wahrscheinlich die Farbverläufe. In diesem Fall senken Sie Ihre Lernrate auf 1e-3oder 1e-4oder sogar weniger, wenn sie fortgesetzt wird.