tensorflow tf.train.ExponentialMovingAverage().variables_to_restore()函数 (用于加载模型时将影子变量直接映射到变量本身)
variables_to_restore函數,是TensorFlow為滑動平均值提供。之前,也介紹過通過使用滑動平均值可以讓神經網絡模型更加的健壯。我們也知道,其實在TensorFlow中,變量的滑動平均值都是由影子變量所維護的,如果你想要獲取變量的滑動平均值需要獲取的是影子變量而不是變量本身。
1、滑動平均值模型文件的保存
import tensorflow as tfif __name__ == "__main__":v = tf.Variable(0.,name="v")#設置滑動平均模型的系數ema = tf.train.ExponentialMovingAverage(0.99)#設置變量v使用滑動平均模型,tf.all_variables()設置所有變量op = ema.apply([v])#獲取變量v的名字print(v.name)#v:0#創建一個保存模型的對象save = tf.train.Saver()sess = tf.Session()#初始化所有變量init = tf.initialize_all_variables()sess.run(init)#給變量v重新賦值sess.run(tf.assign(v,10))#應用平均滑動設置sess.run(op)#保存模型文件save.save(sess,"./model.ckpt")#輸出變量v之前的值和使用滑動平均模型之后的值print(sess.run([v,ema.average(v)]))#[10.0, 0.099999905]上面的代碼,是如何來保存一個滑動平均值的模型文件,之前有介紹過滑動平均值和模型文件的保存,所以這里就不再重復了。
2、滑動平均值模型文件的讀取
v = tf.Variable(1.,name="v") #定義模型對象 saver = tf.train.Saver({"v/ExponentialMovingAverage":v}) sess = tf.Session() saver.restore(sess,"./model.ckpt") print(sess.run(v)) #0.0999999對于模型文件的讀取,在上一篇博客中有介紹過,這里特別需要注意的一個地方就是,在使用tf.train.Saver函數中,所傳遞的模型參數是{“v/ExponentialMovingAverage”:v}而不是{“v”:v},如果你使用的是后面的參數,那么你得到的結果將是10而不是0.09,那是因為后者獲取的是變量本身而不是影子變量。是不是感覺使用這種方式來讀取模型文件的時候,還需要輸入一大串的變量名稱。
3、variables_to_restore函數的使用
v = tf.Variable(1.,name="v") #滑動模型的參數的大小并不會影響v的值 ema = tf.train.ExponentialMovingAverage(0.99) print(ema.variables_to_restore()) #{'v/ExponentialMovingAverage': <tf.Variable 'v:0' shape=() dtype=float32_ref>} sess = tf.Session() saver = tf.train.Saver(ema.variables_to_restore()) saver.restore(sess,"./model.ckpt") print(sess.run(v)) #0.0999999通過使用variables_to_restore函數,可以使在加載模型的時候將影子變量直接映射到變量的本身,所以我們在獲取變量的滑動平均值的時候只需要獲取到變量的本身值而不需要去獲取影子變量。
引用文章:對TensorFlow中的variables_to_restore函數詳解
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的tensorflow tf.train.ExponentialMovingAverage().variables_to_restore()函数 (用于加载模型时将影子变量直接映射到变量本身)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: yunyang tensorfow-yo
- 下一篇: tensorflow tf.train.