同一数据集(train数据集)上的train()和eval()的LSTM精度不同

时间:2019-01-16 12:27:57

标签: python machine-learning pytorch

我已经针对自己一直在处理的预测问题建立了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)

第一次在这里发布,所以如果我做错了,请告诉我!

0 个答案:

没有答案