滑动平均用来估计变量的局部平均值,使得变量的更新与一段时间内的历史取值有关,得到的值在图像上更加平缓光滑,抖动性更小,不会因为某次的异常取值而使得滑动平均值波动很大。在训练过程快结束时,模型早已经训练完成,正处于抖动阶段,而滑动平均相当于将最后的n次训练过程的抖动进行了平均,这样得到的权重会更加健壮。
tensorflow中提供了滑动平均函数:
tf.train.ExponentialMovingAverage(decay, num_updates=None, zero_debias=False, name="ExponentialMovingAverage")
decay参数:衰减率,用于控制模型的更新速度,ExponentialMovingAverage 函数将为每个变量维护一个影子变量,它的初始值等于它对应的变量,每次运行变量更新时,影子变量的值会更新为:shadow_variable=decay⋅shadow_variable+(1−decay)⋅variable
num_updates参数:设定此参数后,衰减率decay将会被动态设置:min(decay, (1 + num_updates) / (10 + num_updates))