tf.train.ExponentialMovingAverage


這個函數可以參考吳恩達deeplearning.ai中的指數加權平均。
和指數加權平均不一樣的是,tensorflow中提供的這個函數,能夠讓decay_rate隨着step的變化而變化。(在訓練初期的時候,較小,在訓練后期的時候,回歸到比較大的情況)
公式是這樣的:
decay= min(decay,(1+steps)/(10+steps))

注:(吳恩達講的修正方法是用計算出來的shadow_variable除以(1-beta^t),其中beta即為上面的decay_rate, 其中t越大,括號里的值越接近1,因為beta是一個小於1的數) 

 

在tensorflow中應用這個函數可以這樣:
import tensorflow as tf
v = tf.Variable(0, dtype=tf.float32)
step = tf.Variable(0, trainable=False)
ema = tf.train.ExponentialMovingAverage(0.9, step)
maintain_average = ema.apply([v])
with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    
    #print initial value
    print(sess.run([v, ema.average(v)]))
    
    sess.run(tf.assign(v, 5))
    sess.run(maintain_average)
    print(sess.run([v, ema.average(v)]))
    
    sess.run(tf.assign(v, 5))
    sess.run(maintain_average)
    print(sess.run([v, ema.average(v)]))

 

上面的代碼有以下幾點要注意:
1) 定義好ema之后,分兩步,一步ema.apply,一步ema.average
2) 先apply,后average
3) apply里放的是一個list
4) Variable通過tf.assign改動
 
上面代碼的運行結果:
[0.0, 0.0]
[5.0, 4.5]
[5.0, 4.9499998]

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM