iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何解决Pytorch在测试与训练过程中的验证结果不一致问题
  • 440
分享到

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

2023-06-15 07:06:33 440人浏览 泡泡鱼
摘要

小编给大家分享一下如何解决PyTorch在测试与训练过程中的验证结果不一致问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!引言今天在使用Pytorch导入此前保存的模型进行测试,在过程中发现输出的结果与验证结果差距甚大,

小编给大家分享一下如何解决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在测试与训练过程中的验证结果不一致问题”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: 如何解决Pytorch在测试与训练过程中的验证结果不一致问题

本文链接: https://www.lsjlt.com/news/278976.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作