1、計算方法
設
可以展開來分析:
以其類推
一般而言,爲了使模型趨於收斂,會選擇decay爲接近1的數,例如:
decay = 0.99;
那麼:
我們發現初始值對後面影響非常大,若初始值與真實值偏差較大時,函數收斂速度非常慢;爲了解決該問題,tensorflow提供了num_updates參數來動態設置decay的大小;
例:
DECAY = 0.99
第一輪,先設num_updates = 0;
那麼:
則:
第二輪,可設num_updates = 100
那麼:
則:
以此類推,從而可以動態調整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]