Pytorch LSTM не обучается

Sep 22 2020

Итак, в настоящее время я пытаюсь реализовать LSTM на Pytorch, но по какой-то причине потери не уменьшаются. Вот моя сеть:

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

И моя тренировочная петля

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()

И это то, что у меня есть

Я пытался понять, что, черт возьми, я делаю неправильно, но понятия не имею. Кроме того, раньше я использовал keras LSTM, и он хорошо работал с набором данных.

Любая помощь? Спасибо!

Ответы

1 YuseqYaseq Sep 22 2020 at 20:10

Вы смотрите на потери в каждой партии. Вы должны усреднить свои потери по всем партиям. Когда вы смотрите на разные партии, ваши потери могут возрасти просто потому, что одну партию сложнее предсказать, чем другую. Вот почему это не совсем интерпретируемое. Итак, начнем с этого. Если проблема не устранена, возможно, это взрывающиеся градиенты. В этом случае снизить скорость обучения до 1e-3или 1e-4даже меньше , если она продолжается.