Моя модель была:
def forward(self, x, hidden=None):
lstm_out, hidden = self.lstm(x, hidden)
lstm_out = (lstm_out[:, :, :self.hidden_size] +
lstm_out[:, :, self.hidden_size:])
out = torch.nn.SELU()(lstm_out)
return out, hidden
Теперь она равна:
def forward(self, x, hidden=None):
lstm_out, hidden = self.lstm(x, hidden)
batch_size = lstm_out.size(0)
flattened_out = lstm_out.view(-1, self.hidden_size * 2)
lstm_out = (lstm_out[:, :, :self.hidden_size] +
lstm_out[:, :, self.hidden_size:])
out = self.linear(flattened_out)
out = torch.nn.functional.relu(out)
view_out = out.view(batch_size, self.seq_length, -1)
return view_out, hidden
Я использовал, чтобы получить потерю проверки (с MSELoss) в 1000
после 2-3 эпох. Теперь с линейным слоем, он взлетел до 15000
даже после 10 эпох. С чего бы это?