Pytorch LSTM tidak berlatih

Sep 22 2020

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

1 YuseqYaseq Sep 22 2020 at 20:10

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.