TensorFlow入门:滑动平均模型

在TensorFlow中提供了tf.train.ExponentialMovingAverage 来实现滑动平均模型,在采用随机梯度下降算法训练神经网络时,使用其可以提高模型在测试数据上的健壮性(robustness)。

TensorFlow下的 tf.train.ExponentialMovingAverage 需要提供一个衰减率decay。该衰减率用于控制模型更新的速度。该衰减率用于控制模型更新的速度,ExponentialMovingAverage 对每一个待更新的变量(variable)都会维护一个影子变量(shadow variable)。影子变量的初始值就是这个变量的初始值,

shadow_variable=decay×shadow_variable+(1−decay)×variableshadow_variable=decay×shadow_variable+(1−decay)×variable

上述公式与之前介绍的一阶滞后滤波法的公式相比较,会发现有很多相似的地方,从名字上面也可以很好的理解这个简约不简单算法的原理:平滑、滤波,即使数据平滑变化,通过调整参数来调整变化的稳定性。

在滑动平滑模型中, decay 决定了模型更新的速度,越大越趋于稳定。实际运用中,decay 一般会设置为十分接近 1 的常数(0.999或0.9999)。为了使得模型在训练的初始阶段更新得更快,ExponentialMovingAverage 还提供了 num_updates 参数来动态设置 decay 的大小: 

decay=min{decay,1+num_updates10+num_updates}
pre_y=inference(X,None,Weight1,biase1,Weight2,biase2)
# 定义存储训练轮数的变量,这个变量不需要计算滑动平均值,所以这个变量为不可训练变量
# 为什么要把它设为0,参见学习率指数衰减的公式,最开始的指数我们让它为0
# 而且在训练过程中,每一次train_step,global_step都会增加1,所以后面这个值会越来越大
global_step=tf.Variable(0,trainable=False)
#给定滑动平均衰减率和训练轮数的变量,初始化滑动平均类
#给定训练轮数的变量可以加快训练早期变量的更新速度。
variable_average=tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY,global_step)
#在所有神经网络参数的变量上使用滑动平均
variable_average_op=variable_average.apply(tf.trainable_variables())
#计算滑动平均之后的前向传播结果
#滑动平均不会改变变量本身的取值,而是会维护一个影子变量来记录其滑动平均值
#所以当需要使用这个滑动平均值时,需要明确调用average函数。
average_y=inference(X,variable_average,Weight1,biase1,Weight2,biase2)

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值