前言

今天 debug 代码的时候发现同一个图片输出不同类,然后一直 debug,发现是 ResNet 里面 使用了 BatchNorm2d 原因。

同一个五张图片,一起输入和分别输如会输出不同的结果。

因为输入激活的归一化(BatchNorm2d)会根据 batch size 改变

5pic测试预测值也是这样。

5picplus

训练 net.trian() 和测试 net.eval() 模式,在一般简单的神经网络中,这两种模式基本一样,但是当网络涉及到到 dropoutbatchnorm 的时候就会产生区别。

resnet
这个我理解就就是输入的图片数目不同,最后正则化之后的分布也不同,所以会存在输出不同的情况。

解决方法

聪明的同学可能已经猜到了,就是添加一个 net.eval() 在测试之前就可以。

solution最后的结果就会相同了,这个问题困扰了我一天,以前用 Tensorflow 还没遇到过这个问题。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐