Tensorflow实战google深度学习框架代码学习五(滑动平均模型的应用)

关于为什么使用滑动平均模型?1.使用最后滑动平均模型技术更新后的变量(权值,偏置),可以使最后训练的模型在测试数据上表现的更加健壮。为什么会更加健壮呢?因为可以降低周期性不稳定数据和一些数据噪声的影响(什么是数据噪声呢,也就是异常的数据)。仔细想一下,滑动平均我们可以相称每次更新后取的是变量的平均值,所以数据噪声,或者周期性变动很大的数据会被平均下来,但是异常数据毕竟少数,所以我们可以预测整体趋势,所以会在测试数据上表现的更加健壮。

#滑动平均模型的运用
import tensorflow as tf 

a = tf.Variable(0,dtype=tf.float32)
step = tf.Variable(0,dtype=tf.float32 )#模拟实际训练模型的步数

ema = tf.train.ExponentialMovingAverage(decay=0.99,num_updates=step)#返回一个滑动平均对象
op = ema.apply([a])#对a使用滑动平均

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run([a,ema.average(a)]))#ema.average(a)返回在a上使用滑动平均后的值,也就是在使用过后apply()函数后的值
    
    #滑动平均模型计算的公式=decay*shawdow_variable+(1-decay)*variable   decay=min{0.99,(1+step)/(10+step)}
    #为a赋值5  ema.average(a)= 0.1*0+0.9*5=4.5 根据上面公式decay=0.1
    sess.run(tf.assign(a,5))
    sess.run(op)
    print(sess.run([a,ema.average(a)]))
    
    #ema.average(a)=0.99*4.5+0.01*10=4.5549998 根据上面公式decay = 0.99111111111
    sess.run(tf.assign(step,10000))
    sess.run(tf.assign(a,10))
    sess.run(op)
    print(sess.run([a,ema.average(a)]))

结果:

[0.0, 0.0]
[5.0, 4.5]
[10.0, 4.5549998]

    原文作者:Carson
    原文地址: https://zhuanlan.zhihu.com/p/36946985
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞