Tensorflow實戰google深度學習框架代碼學習五(滑動平均模型的應用)
來自專欄 tensorflow代碼學習+pythonAI
關於為什麼使用滑動平均模型?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]
推薦閱讀:
※集智漫畫:如何教女朋友人工智慧(一)
※機器學習入門基礎——邏輯回歸
※感知機(PLA)
※【5】如何理解CNN中的池化?
※課程安利:用物理學的眼光看機器學習--Deep Learning and Quantum Many-BodyComputation
TAG:機器學習 |