• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    解决Pytorch在测试与训练过程中的验证结果不一致问题

    引言

    今天在使用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 DistributedDataParallel 多卡训练结果变差的解决方案
    下一篇:解决BN和Dropout共同使用时会出现的问题
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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