TensorFlow优化之滑动平均模型

一、滑动平均模型

滑动平均模型,它可以使得模型在测试数据上更健壮,在使用随机梯度下降算法训练神经网络时,通过滑动平均模型可以在很多的应用中在一定程度上提高最终模型在测试数据上的表现。其实滑动平均模型,主要是通过控制衰减率来控制参数更新前后之间的差距,从而达到减缓参数的变化值(如,参数更新前是5,更新后的值是4,通过滑动平均模型之后,参数的值会在4到5之间),如果参数更新前后的值保持不变,通过滑动平均模型之后,参数的值仍然保持不变。

二、ExponentialMovingAverage函数

TensorFlow中的ExponentialMovingAverage函数实现了滑动平均模型,下面对该函数进行简单的介绍。

tf.train.ExponentialMovingAverage(decay, num_updates=None, zero_debias=False,name="ExponentialMovingAverage")

参数:

decay:实数类型,衰减率。

num_updates:可选,设置这个参数之后,将会通过min(decay, (1 + num_updates) / (10 + num_updates))函数,从中选择最小值做为衰减率。

返回值:ExponentialMovingAverage对象,通过对象调用apply方法可以通过滑动平均模型来更新参数。

计算公式:shadow_variable = decay * shadow_variable + (1-decay) * variable

计算公式中的shadow_variable为影子变量,也就是变量在更新之前的值,variable是变量现在的值,可能这样说不是很明白,下面用TensorFlow的程序来实现滑动平均模型。

三、TensorFlow实现滑动平均模型

import tensorflow as tf

if __name__ == "__main__":
    #定义一个变量用于计算滑动平均,变量的初始值为0,变量的类型必须是实数
    v1 = tf.Variable(5,dtype=tf.float32)
    #定义一个迭代轮数的变量,动态控制衰减率,并设置为不可训练
    step = tf.Variable(10,trainable=False)
    #定义一个滑动平均类,初始化衰减率为0.99和衰减率的变量step
    ema = tf.train.ExponentialMovingAverage(0.99,step)
    #定义每次滑动平均所更新的列表
    maintain_average_op = ema.apply([v1])
    #初始化上下文会话
    with tf.Session() as sess:
        #初始化所有变量
        init = tf.initialize_all_variables()
        sess.run(init)
        #更新v1的滑动平均值
        '''
        衰减率为min(0.99,(1+step)/(10+step)=0.1}=0.1
        '''
        sess.run(maintain_average_op)
        #[5.0, 5.0]
        print(sess.run([v1,ema.average(v1)]))
        sess.run(tf.assign(v1,4))
        sess.run(maintain_average_op)
        #[4.0, 4.5500002],5*(11/20) + 4*(9/20)
        print(sess.run([v1, ema.average(v1)]))



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

修炼之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值