我已经针对自己一直在处理的预测问题建立了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)
第一次在这里发布,所以如果我做错了,请告诉我!