首页 Paddle框架 帖子详情
如何判断模型是在train还是在eval ?
收藏
快速回复
Paddle框架 问答深度学习模型训练炼丹技巧 2959 38
如何判断模型是在train还是在eval ?
收藏
快速回复
Paddle框架 问答深度学习模型训练炼丹技巧 2959 38

在bn、dropout的处理中,train阶段和非train阶段处理不同,如何确定模型是在训练还是在预测或验证?

0
收藏
回复
全部评论(38)
时间顺序
thinc
#2 回复于2020-11

如果训练和测试处理不同,在api的参数有 is_test 参数,训练的时候默认False,测试的时候改成True就不会反向传播啦!

比如Dropout:https://www.paddlepaddle.org.cn/documentation/docs/zh/2.0-rc/api/paddle/fluid/dygraph/Dropout_cn.html#dropout

0
回复
thinc
#3 回复于2020-11

至于模型在训练还是预测,就得看开发者你自己执行的哪一段代码了

0
回复
AIStudio810258
#4 回复于2020-11
thinc #2
如果训练和测试处理不同,在api的参数有 is_test 参数,训练的时候默认False,测试的时候改成True就不会反向传播啦! 比如Dropout:https://www.paddlepaddle.org.cn/documentation/docs/zh/2.0-rc/api/paddle/fluid/dygraph/Dropout_cn.html#dropout
展开

这个很有借鉴意义,以后自定义op时可以用这个参数在train、eval阶段做不同处理

0
回复
AIStudio810258
#5 回复于2020-11
thinc #3
至于模型在训练还是预测,就得看开发者你自己执行的哪一段代码了

后来,我有看了一下nn.Layer的python代码,发现里面定义了一个is_training属性。

0
回复
AIStudio810258
#6 回复于2020-11

判断这个属性就知道在train还是在eval了。

0
回复
AIStudio810258
#7 回复于2020-11
thinc #2
如果训练和测试处理不同,在api的参数有 is_test 参数,训练的时候默认False,测试的时候改成True就不会反向传播啦! 比如Dropout:https://www.paddlepaddle.org.cn/documentation/docs/zh/2.0-rc/api/paddle/fluid/dygraph/Dropout_cn.html#dropout
展开

设定is_training=True还是得手动那句self.train()

0
回复
AIStudio810258
#8 回复于2020-11
thinc #2
如果训练和测试处理不同,在api的参数有 is_test 参数,训练的时候默认False,测试的时候改成True就不会反向传播啦! 比如Dropout:https://www.paddlepaddle.org.cn/documentation/docs/zh/2.0-rc/api/paddle/fluid/dygraph/Dropout_cn.html#dropout
展开

的确,eval时不进行dropout,而且bn直接用估计的均值和方差

0
回复
thinc
#9 回复于2020-11
这个很有借鉴意义,以后自定义op时可以用这个参数在train、eval阶段做不同处理

自定义的时候也可以这么用,毕竟不用反向传播可以节省不少时间

0
回复
thinc
#10 回复于2020-11
设定is_training=True还是得手动那句self.train()

我一般在定义的时候设置一个参数 is_test 来判断要不要反向传播~~

0
回复
AIStudio810258
#11 回复于2020-11
thinc #10
我一般在定义的时候设置一个参数 is_test 来判断要不要反向传播~~

我理解动态图里反向计算得手动backward()吧,验证时不执行

0
回复
AIStudio810258
#12 回复于2020-11
thinc #10
我一般在定义的时候设置一个参数 is_test 来判断要不要反向传播~~

前两天我终于吧bn的理解误区给添上了,一直用现成的,一直理解错误了~~

0
回复
AIStudio810258
#13 回复于2020-11
thinc #10
我一般在定义的时候设置一个参数 is_test 来判断要不要反向传播~~

我现在正从头撸那本numpy手写神经网络的书呢,原来太多“想当然了”。。。

0
回复
AIStudio810258
#14 回复于2020-11

我就是重新写了下bn,里面均值和方差在训练和推理时取值不一样。

0
回复
AIStudio810258
#15 回复于2020-11

训练时用移动均值,不断修正,预测时用训练时算的值

0
回复
thinc
#16 回复于2020-11
我理解动态图里反向计算得手动backward()吧,验证时不执行

嗯 可以把is_test理解成开关

0
回复
thinc
#17 回复于2020-11
前两天我终于吧bn的理解误区给添上了,一直用现成的,一直理解错误了~~

哇 说说你的理解呗~~~小板凳坐好了

0
回复
thinc
#18 回复于2020-11
我现在正从头撸那本numpy手写神经网络的书呢,原来太多“想当然了”。。。

哪一本?方便贴下链接吗?

0
回复
thinc
#19 回复于2020-11
我就是重新写了下bn,里面均值和方差在训练和推理时取值不一样。

bn的话也可以看Paddle源码呀

0
回复
AIStudio810258
#20 回复于2020-11
thinc #17
哇 说说你的理解呗~~~小板凳坐好了 [图片]

原来我bn都没好好看,就去弄谱归一化去了,结果看人家实现的spn层,不明所以,所以“吃土”了~~

 

0
回复
AIStudio810258
#21 回复于2020-11
thinc #17
哇 说说你的理解呗~~~小板凳坐好了 [图片]

后来我就把什么bn,ln,in,gn什么的统统看了一遍,

最后在把《动手深度学习》的代码改成paddle版本时,总算是把这个最基本的处理给基本上通透了~~

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户