tensorflow學習筆記-ExponentialMovingAverage


ExponentialMovingAverage

Some training algorithms, such as GradientDescent and Momentum often benefit from maintaining a moving average of variables during optimization. Using the moving averages for evaluations often improve results significantly.
tensorflow 官網(wǎng)上對于這個方法功能的介紹。GradientDescent 和 Momentum 方式的訓練 都能夠從 ExponentialMovingAverage 方法中獲益。

什么是MovingAverage? 我的理解就是一段時間窗口內(nèi)的這個變量的歷史平均值。

tensorflow 中的 ExponentialMovingAverage

官方文檔中的公式:
shadowVariable=decay?shadowVariable+(1?decay)?variable
官網(wǎng)的example:

# Create variables.
var0 = tf.Variable(...)
var1 = tf.Variable(...)
# ... use the variables to build a training model...
...
# Create an op that applies the optimizer.  This is what we usually
# would use as a training op.
opt_op = opt.minimize(my_loss, [var0, var1])

# Create an ExponentialMovingAverage object
ema = tf.train.ExponentialMovingAverage(decay=0.9999)

# Create the shadow variables, and add ops to maintain moving averages
# of var0 and var1.
maintain_averages_op = ema.apply([var0, var1])

# Create an op that will update the moving averages after each training
# step.  This is what we will use in place of the usual training op.
with tf.control_dependencies([opt_op]):
    training_op = tf.group(maintain_averages_op)
    # run這個op獲取當前時刻 ema_value
    get_var0_average_op = ema.average(var0)

使用 ExponentialMovingAveraged parameters

假設我們使用了ExponentialMovingAverage方法訓練了神經(jīng)網(wǎng)絡, 在test階段,如何使用 ExponentialMovingAveraged parameters呢? 官網(wǎng)也給出了答案

# Create a Saver that loads variables from their saved shadow values.
shadow_var0_name = ema.average_name(var0)
shadow_var1_name = ema.average_name(var1)
saver = tf.train.Saver({shadow_var0_name: var0, shadow_var1_name: var1})
saver.restore(...checkpoint filename...)
# var0 and var1 now hold the moving average values

或者

#Returns a map of names to Variables to restore.
variables_to_restore = ema.variables_to_restore()
saver = tf.train.Saver(variables_to_restore)
...
saver.restore(...checkpoint filename...)

轉載: CSDN Blog


?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容