gpt4 book ai didi

PyTorch dropout设置训练和测试模式的实现

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章PyTorch dropout设置训练和测试模式的实现由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

看代码吧~

?
1
2
3
4
5
6
class Net(nn.Module):
model = Net()
model.train() # 把module设成训练模式,对Dropout和BatchNorm有影响
model. eval () # 把module设置为预测模式,对Dropout和BatchNorm模块有影响

补充:Pytorch遇到的坑——训练模式和测试模式切换 。

由于训练的时候Dropout和BN层起作用,每个batch BN层的参数不一样,dropout在训练时随机失效点具有随机性,所以训练和测试要区分开来.

使用时切记要根据实际情况切换:

?
1
2
model.train()
model. eval ()

补充:Pytorch在测试与训练过程中的验证结果不一致问题 。

引言

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

现象

此前的错误代码是 。

?
1
2
3
4
5
6
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()

应该改为 。

?
1
2
3
4
5
6
7
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,选取训练好的值,否则则会取平均,可能导致生成的图片颜色失真.

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我.

原文链接:https://guotong1988.blog.csdn.net/article/details/78724624 。

最后此篇关于PyTorch dropout设置训练和测试模式的实现的文章就讲到这里了,如果你想了解更多关于PyTorch dropout设置训练和测试模式的实现的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com