(Tensorflow之六)滑动平均模型ExponentialMovingAverage

6 篇文章 0 订阅

1、计算方法

{a1,a2,a3,...,an} ,其衰减率为 decay ,对应的影子变量为:
{m1,m2,m3,...,mn} ,则:

mn=decaymn1+(1decay)an

可以展开来分析:
m1=a1

m2=decaya1+(1decay)a2

m3=decaym2+(1decay)a3=decay2a1+(1decay)decaya2+(1decay)a3

m4=decaym3+(1decay)a4=decay3a1+(1decay)decay2a2+(1decay)decaya3+(1decay)a4

......

以其类推
mn=decaymn1+(1decay)an=decayn1a1+decayn2(1decay)+...+(1decay)an

一般而言,为了使模型趋于收敛,会选择decay为接近1的数,例如:
decay = 0.99;
那么:
m1=a1

m2=0.99a1+0.01a2

m3=0.99m2+0.01a3=0.992a1+0.010.99a2+0.01a3

我们发现初始值对后面影响非常大,若初始值与真实值偏差较大时,函数收敛速度非常慢;为了解决该问题,tensorflow提供了num_updates参数来动态设置decay的大小;
decay=min{DECAY,1+num_updates10+num_updates}

例:
DECAY = 0.99
第一轮,先设num_updates = 0;
那么:

decay=min{0.99,1+010+0}=0.1

则:
m1=a1

m2=0.1a1+0.9a2

第二轮,可设num_updates = 100
那么:
decay=min{0.99,1+10110+100}=0.91

则:
m3=0.91m2+0.09a3

以此类推,从而可以动态调整decay值大小。

import tensorflow as tf

test1 = tf.Variable(0,dtype=tf.float32)
num_updates = tf.Variable(0,dtype=tf.float32)
DECAY = 0.99

Moving_average = tf.train.ExponentialMovingAverage(DECAY,num_updates)

#跟新test1
Moving_average_op = Moving_average.apply([test1])

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    #第一次打印出初始值,滑动平均值,输出值应该为[0,0]
    print(sess.run([test1,Moving_average.average(test1)]))

    #更新test1
    sess.run(tf.assign(test1,3))
    sess.run(Moving_average_op)
    #第二次打印初始值,滑动平均值,输出值应该为[3,0],滑动平均值计算0*0.1+0.9*3=2.7
    print(sess.run([test1,Moving_average.average(test1)]))

    #更新test2与num_updates
    sess.run(tf.assign(test1,5))
    sess.run(tf.assign(num_updates,90))
    sess.run(Moving_average_op)
    #第三次打印初始值,滑动平均值,输出值应该为[3,0],滑动平均值计算2.7*0.91+5*0.09
    print(sess.run([test1,Moving_average.average(test1)]))   

输出值

[0.0, 0.0]
[3.0, 2.6999998]
[5.0, 2.9069998]
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值