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

在调试代码时,发现由于ResNet网络中的BatchNorm2d层,同一图片在批量输入和单独输入时得到不同结果。这归因于BatchNorm2d层的归一化过程依赖于批次大小(batchsize)。在train()和eval()两种模式下,特别是在涉及dropout和batchnorm时,其行为有别。解决方案是在测试前添加net.eval(),以确保一致的输出。此问题在Tensorflow中不常见。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

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

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

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

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

5picplus

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

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

解决方法

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值