Я создал модель customLSTM для задачи прогнозирования, над которой я работал, и потери при обучении довольно низкие, поэтому я знаю, что она хорошо тренировалась. Однако сразу после тренировки, когда я запускаю точно такой же набор данных в режиме model.eval () или использую torch.no_grad () и не применяя оптимизатор и функцию потерь, потери резко возрастают. Поскольку модель после тренировки дает примерно такой же прогноз, как и во время тренировки, хотя я понимаю, что вычисление градиента может изменить модель, она не должна отвечать за увеличение ошибки с порядка e-03 до e-01 или даже выше. ,
Я не совсем уверен, что я делаю неправильно.
Модель относится к типу:
super(customLSTM, self).__init__()
self.lstm1 = nn.LSTM(5, 50, num_layers=2).cuda()
self.linear = nn.Linear(50, 5).cuda()
Пользовательская функция пересылки:
outputs = []
input = input.cuda()
#each = each.view(1,1,-1)
self.lstm1.flatten_parameters()
h_t1, c_t1 = self.lstm1(input)# (h_t1, c_t1))
self.prev_c_t1 = c_t1
h_t1 = h_t1.double()
h_t1.cuda()
output = self.linear(h_t1) #regression
return output
Обучение более или менее:
self.zero_grad()
out = self.forward(each)
loss = criterion(out, loss_cmp) #loss_cmp is the correct value, out is the prediction
optimizer.zero_grad()
loss.backward()
optimizer.step()
при проверке функции:
out = self.forward(each)
loss = criterion(out, loss_cmp)
Первый раз здесь, так что дайте мне знать, если я делаю что-то не так!