Pytorch LSTM не обучается
Итак, в настоящее время я пытаюсь реализовать 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, и он хорошо работал с набором данных.
Любая помощь? Спасибо!
Ответы
Вы смотрите на потери в каждой партии. Вы должны усреднить свои потери по всем партиям. Когда вы смотрите на разные партии, ваши потери могут возрасти просто потому, что одну партию сложнее предсказать, чем другую. Вот почему это не совсем интерпретируемое. Итак, начнем с этого. Если проблема не устранена, возможно, это взрывающиеся градиенты. В этом случае снизить скорость обучения до 1e-3или 1e-4даже меньше , если она продолжается.