Pytorch LSTM no entrenando

Sep 22 2020

Entonces, actualmente estoy tratando de implementar un LSTM en Pytorch, pero por alguna razón la pérdida no está disminuyendo. Aquí está mi red:

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

Y mi ciclo de entrenamiento

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

Y esto es lo que tengo

He estado tratando de buscar qué diablos estoy haciendo mal pero no tengo ni idea. Además, antes usaba un keras LSTM y funcionaba bien en el conjunto de datos.

¿Alguna ayuda? ¡Gracias!

Respuestas

1 YuseqYaseq Sep 22 2020 at 20:10

Miras la pérdida en cada lote. Debe promediar su pérdida en todos los lotes. Cuando observa diferentes lotes, su pérdida puede aumentar simplemente porque un lote es más difícil de predecir que el otro. Por eso no es realmente interpretable. Así que empieza con eso. Si el problema persiste, probablemente se trate de gradientes explosivos. En ese caso, reducir su tasa de aprendizaje a 1e-3o 1e-4o incluso menos si continúa.