开坑:关于MATLAB 使用CNN进行图像分类时,训练输出的验证集精度会陡降的问题

开坑 关于MATLAB 使用CNN进行图像分类时,训练输出的验证集精度会陡降的问题

  • 问题描述
  • 原因探究
    • MATLAB官方文档查阅
    • 个人理解
    • 两种模式与输出验证集精度的关系
    • 验证

问题描述

如图所示,蓝色线代表训练集精度,黑色圆点是验证集精度,在训练的时候二者精度都比较高,但是最后输出的模型(图中红框所示)是这样的,抖降到了84.8%,这个就很奇怪。

评估BN层中统计数据的模式,指定为一下一种:
‘population’ – 使用population统计数据,在训练之后,软件通过再次pass through训练数据并使用结果均值和方差来最终确定统计数据。
‘moving’ – 使用更新步骤给出的运行估算,近似训练期间的统计数据,并且按照下式更新

意思是当 BatchNormalizationStatistics 的训练选项为 ‘moving’ 时,在每个iteration,层使用下面这两个式子更新滑动平均值和滑动方差值。

而当 BatchNormalizationStatistics 的训练选项为 ‘population’ 时,MeanDecay和VarianceDecay选项不起作用。


个人理解

那也就是说,当训练选项是’moving’的时候,每一个iteration都会对mean和variance进行一次额外的计算,这个计算叫做滑动平均,下面以均值为例(方差道理一样)

开坑:关于MATLAB 使用CNN进行图像分类时,训练输出的验证集精度会陡降的问题

λμ lambda_mu λμ? —— 是上文中的MeanDecay, 1 ? λμ 1-lambda_mu 1?λμ?貌似也叫动量参数
μ^ widehat{mu} μ ? —— 是层输入的均值
μ mu μ —— 是最新的滑动平均值
μ? mu^ast μ? —— 更新过后的平均值

在这种模式下应该是以μ? mu^ast μ?作为BN层归一化时候的平均值。
如果使用’population’模式,那么就应该是直接计算batch每一个通道的平均值作为归一化时候的平均值。

两种模式的不同就体现在平均值和方差的不同计算方法上。

两种模式与输出验证集精度的关系

搞清楚了两种模式的不同,那么这些设置和一开始提出的输出验证集精度下降有什么关系呢p>

如果BatchNormalizationStatistics训练选项是’population’,那么在 络训练结束之后,软件再次pass through数据,并把TrainedMean和TrainedVariance特征分别设置为整个训练集中计算得到的均值和方差。

从官方文档的这句话可以看出,训练结束之后,输出的BN层的均值和方差和最后一次验证的验证集的BN层的均值和方差不一样,因为输出的均值和方差是再次利用了整个训练集的数据计算得来的均值和方差。这应该就是使用’population’模式最终输出的验证集有可能会陡降的原因。

验证

我将BatchNormalizationStatistics训练选项设置为’moving’,貌似是情况好了一点,但实际上跑几次程序还是会出现陡降的问题,暂时不知道怎么回事。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年8月25日
下一篇 2022年8月25日

相关推荐