Pytorch 相同输入不同输出的一种解决方法

前言

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

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

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

Pytorch 相同输入不同输出的一种解决方法_第1张图片测试预测值也是这样。

Pytorch 相同输入不同输出的一种解决方法_第2张图片

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

Pytorch 相同输入不同输出的一种解决方法_第3张图片
这个我理解就就是输入的图片数目不同,最后正则化之后的分布也不同,所以会存在输出不同的情况。

解决方法

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

Pytorch 相同输入不同输出的一种解决方法_第4张图片最后的结果就会相同了,这个问题困扰了我一天,以前用 Tensorflow 还没遇到过这个问题。

你可能感兴趣的:(论文,pytorch,深度学习,tensorflow)