在bn、dropout的处理中,train阶段和非train阶段处理不同,如何确定模型是在训练还是在预测或验证?
如果训练和测试处理不同,在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阶段做不同处理
后来,我有看了一下nn.Layer的python代码,发现里面定义了一个is_training属性。
判断这个属性就知道在train还是在eval了。
设定is_training=True还是得手动那句self.train()
的确,eval时不进行dropout,而且bn直接用估计的均值和方差
自定义的时候也可以这么用,毕竟不用反向传播可以节省不少时间
我一般在定义的时候设置一个参数 is_test 来判断要不要反向传播~~
我理解动态图里反向计算得手动backward()吧,验证时不执行
前两天我终于吧bn的理解误区给添上了,一直用现成的,一直理解错误了~~
我现在正从头撸那本numpy手写神经网络的书呢,原来太多“想当然了”。。。
我就是重新写了下bn,里面均值和方差在训练和推理时取值不一样。
训练时用移动均值,不断修正,预测时用训练时算的值
嗯 可以把is_test理解成开关
哇 说说你的理解呗~~~小板凳坐好了
哪一本?方便贴下链接吗?
bn的话也可以看Paddle源码呀
原来我bn都没好好看,就去弄谱归一化去了,结果看人家实现的spn层,不明所以,所以“吃土”了~~
后来我就把什么bn,ln,in,gn什么的统统看了一遍,
最后在把《动手深度学习》的代码改成paddle版本时,总算是把这个最基本的处理给基本上通透了~~
如果训练和测试处理不同,在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阶段做不同处理
后来,我有看了一下nn.Layer的python代码,发现里面定义了一个is_training属性。
判断这个属性就知道在train还是在eval了。
设定is_training=True还是得手动那句self.train()
的确,eval时不进行dropout,而且bn直接用估计的均值和方差
自定义的时候也可以这么用,毕竟不用反向传播可以节省不少时间
我一般在定义的时候设置一个参数 is_test 来判断要不要反向传播~~
我理解动态图里反向计算得手动backward()吧,验证时不执行
前两天我终于吧bn的理解误区给添上了,一直用现成的,一直理解错误了~~
我现在正从头撸那本numpy手写神经网络的书呢,原来太多“想当然了”。。。
我就是重新写了下bn,里面均值和方差在训练和推理时取值不一样。
训练时用移动均值,不断修正,预测时用训练时算的值
嗯 可以把is_test理解成开关
哇 说说你的理解呗~~~小板凳坐好了
哪一本?方便贴下链接吗?
bn的话也可以看Paddle源码呀
原来我bn都没好好看,就去弄谱归一化去了,结果看人家实现的spn层,不明所以,所以“吃土”了~~
后来我就把什么bn,ln,in,gn什么的统统看了一遍,
最后在把《动手深度学习》的代码改成paddle版本时,总算是把这个最基本的处理给基本上通透了~~