前言
今天 debug 代码的时候发现同一个图片输出不同类,然后一直 debug,发现是 ResNet
里面 使用了 BatchNorm2d
原因。
同一个五张图片,一起输入和分别输如会输出不同的结果。
因为输入激活的归一化(BatchNorm2d
)会根据 batch size 改变
测试预测值也是这样。
训练
net.trian()
和测试net.eval()
模式,在一般简单的神经网络中,这两种模式基本一样,但是当网络涉及到到dropout
和batchnorm
的时候就会产生区别。
这个我理解就就是输入的图片数目不同,最后正则化之后的分布也不同,所以会存在输出不同的情况。
解决方法
聪明的同学可能已经猜到了,就是添加一个 net.eval()
在测试之前就可以。
最后的结果就会相同了,这个问题困扰了我一天,以前用
Tensorflow
还没遇到过这个问题。