这篇里面没图片
BatchNorm的affine=True的情况下,如果训练和测试的时候Batch_Size设置成不同的数字,比如训练的时候Batch_Size=16,测试的时候单张测试(Batch_Size=1),则测试结果会很差,必须在测试的时候Batch_Size=16(也就是测试和训练使用同样的Batch_Size),才会有合理的结果
这样的情况是因为BatchNorm的affine=True的情况下,BatchNorm的参数也会进入训练,但这个时候BatchNorm的参数是适合Batch_Size=16的时候使用的,一旦Batch_Size变化,这个训练出来的参数就会变得不适用。
解决方法是,将BatchNorm的affine=False,这样训练和测试的时候Batch_Size的大小就没有关系了,缺点是会导致训练速度变慢
以上是手写的情况下,但是在pytorch中不需要这样做,只需要在验证的时候加入 model.eval() 就可以了