Pytorch LSTM trainiert nicht

Sep 22 2020

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

1 YuseqYaseq Sep 22 2020 at 20:10

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.