class tf.train.ExponentialMovingAverage:
tf.train.ExponentialMovingAverage.__init__(decay, num_updates=None, name='ExponentialMovingAverage')
传入decay,num_updatas来创建一个滑动平均对象
decay会在训练一开始比较低(例如0.9),这样可以让训练初始阶段变化得快一点,随着训练step的增多,decay越接近1,趋于稳定。实际上decay的取值为:min(decay, (1 + num_updates) / (10 + num_updates))
方法1:
tf.train.ExponentialMovingAverage.apply(var_list=None)
传入一个包含变量名的列表,该方法为列表中的变量创建影子变量(Shadow variables ),影子变量会初始化为变量的初始值。影子变量通过设置参数trainable=False被创建并添加到GraphKeys.ALL_VARIABLES collection,他们可以通过调用tf.all_variables()被返回。
该方法返回一个操作节点,用来更新滑动平均里面的变量。
即实现下列算法:
shadow_variable = decay * shadow_variable + (1 - decay) * variable
方法2:
tf.train.ExponentialMovingAverage.average_name(var)
返回var该变量的影子变量的名字,测试的时候用
例如:
# Create a Saver that loads variables from their saved shadow values.
shadow_var0_name = ema.average_name(var0)
shadow_var1_name = ema.average_name(var1)
saver = tf.train.Saver({shadow_var0_name: var0, shadow_var1_name: var1})
saver.restore(...checkpoint filename...)
# var0 and var1 now hold the moving average values
方法3:
tf.train.ExponentialMovingAverage.average(var)
返回var对应的影子变量的值。