主页 > 知识库 > 解决Pytorch在测试与训练过程中的验证结果不一致问题

解决Pytorch在测试与训练过程中的验证结果不一致问题

热门标签:市场上的电销机器人 小苏云呼电话机器人 儋州电话机器人 所得系统电梯怎样主板设置外呼 北京电销外呼系统加盟 朝阳手机外呼系统 地图标注面积 北瀚ai电销机器人官网手机版 佛山400电话办理

引言

今天在使用Pytorch导入此前保存的模型进行测试,在过程中发现输出的结果与验证结果差距甚大,经过排查后发现是forward与eval()顺序问题。

现象

此前的错误代码是

    input_cpu = torch.ones((1, 2, 160, 160))
    target_cpu =torch.ones((1, 2, 160, 160))
    target_gpu, input_gpu = target_cpu.cuda(), input_cpu.cuda()
    model.set_input_2(input_gpu, target_gpu)
    model.eval()
    model.forward()

应该改为

    input_cpu = torch.ones((1, 2, 160, 160))
    target_cpu =torch.ones((1, 2, 160, 160))
    target_gpu, input_gpu = target_cpu.cuda(), input_cpu.cuda()
    model.set_input_2(input_gpu, target_gpu)
    # 先forward再eval
    model.forward()
    model.eval()

当时有个疑虑,为什么要在forward后面再加eval(),查了下相关资料,主要是在BN层以及Dropout的问题。

当使用eval()时,模型会自动固定BN层以及Dropout,选取训练好的值,否则则会取平均,可能导致生成的图片颜色失真。

PyTorch进行训练和测试时一定注意要把实例化的model指定train/eval

使用PyTorch进行训练和测试时一定注意要把实例化的model指定train/eval,eval()时,框架会自动把BN和DropOut固定住,不会取平均,而是用训练好的值,不然的话,一旦test的batch_size过小,很容易就会被BN层导致生成图片颜色失真极大!!!!!!

eg:

Class Inpaint_Network()
......
Model = Inpaint_Nerwoek()

#train:
Model.train(mode=True)
.....

#test:
Model.eval()

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
  • Pytorch evaluation每次运行结果不同的解决
  • pytorch加载预训练模型与自己模型不匹配的解决方案
  • 踩坑:pytorch中eval模式下结果远差于train模式介绍

标签:金融催收 江苏 龙岩 云南 商丘 定西 宁夏 酒泉

巨人网络通讯声明:本文标题《解决Pytorch在测试与训练过程中的验证结果不一致问题》,本文关键词  解决,Pytorch,在,测试,与,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《解决Pytorch在测试与训练过程中的验证结果不一致问题》相关的同类信息!
  • 本页收集关于解决Pytorch在测试与训练过程中的验证结果不一致问题的相关信息资讯供网民参考!
  • 推荐文章