Batch Size 不同对evaluation performance的影响

admin2024-07-03  14

目录

    • 问题描述
    • 如果是bug
    • batch size的设置问题
    • 尝试使用GroupNorm解决batchsize不同带来的问题
      • 归一化的分类
    • 参考文章

问题描述

深度学习网络训练时,使用较小的batch size训练网络后,如果换用较大的batch size进行evaluation,网络的预测能力会显著下降。如果evaluation的batch size和train的batch size大小相同时,则不会遇到此类问题。

PyTorch Forums – Performance highly degraded when eval() is activated in the test phase

如果是bug

  1. metric会根据batch_size的大小变化(但并不显著),metric按每个batch分别进行计算
  2. 缺失model.eval()指令:with torch.no_grad() 对dropout和batch normalization不起固定作用。
    1. nn.Dropout层参数不会固定
    2. nn.BatchNorm2d()
      1. PyTorch – BatchNorm2d BatchNorm2d函数中的参数track_running_stats:trainningtrack_running_statstrack_running_stats=True表示跟踪整个训练过程中的batch的统计特性,得到方差和均值,而不只是仅仅依赖与当前输入的batch的统计特性。相反的,如果track_running_stats=False那么就只是计算当前输入的batch的统计特性中的均值和方差了。当在推理阶段的时候,如果track_running_stats=False,此时如果batch_size比较小,那么其统计特性就会和全局统计特性有着较大偏差,可能导致糟糕的效果。
      2. trainning=False, track_running_stats=True。这个是期望中的测试阶段的设置,此时BN会用之前训练好的模型中的(假设已经保存下了)running_meanrunning_var并且不会对其进行更新。一般来说,只需要设置model.eval()其中model中含有BN层,即可实现这个功能。
  3. Dataloader中加入了随机处理,例如RandomCrop
  4. 没有固定随机种子

batch size的设置问题

如果batch size较小,会导致上述running_mean和running_var不准确。参考文章Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift,当模型训练完成后,

x ^ = x − E [ x ] V a r [ x ] + ϵ \hat{x} = \frac{x-E[x]}{\sqrt{Var[x]+\epsilon}} x^=Var[x]+ϵ xE[x]

其中, V a r [ x ] = m m − 1 E B [ σ B 2 ] Var[x]=\frac{m}{m-1}E_B[\sigma_B^2] Var[x]=m1mEB[σB2],the expectation is over training mini-batches of size m and σ B 2 \sigma_B^2 σB2 are their sample variances.

尝试使用GroupNorm解决batchsize不同带来的问题

归一化的分类

Batch Size 不同对evaluation performance的影响,归一化的分类,第1张
LN 和 IN 在视觉识别上的成功率都是很有限的,对于训练序列模型(RNN/LSTM)或生成模型(GAN)很有效。

所以,在视觉领域,BN用的比较多,GN就是为了改善BN的不足而来的。

GN 把通道分为组,并计算每一组之内的均值和方差,以进行归一化。GN 的计算与批量大小无关,其精度也在各种批量大小下保持稳定。可以看到,GN和LN很像。

参考文章

pytorch 每次测试结果不同
Batch Normalization
深度学习中的组归一化(GroupNorm)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!