tf.train.saver().save() 和 。restore(s)


https://www.cnblogs.com/denny402/p/6940134.html

https://blog.csdn.net/mieleizhi0522/article/details/80535189

https://blog.csdn.net/u012436149/article/details/56484572

_______________________________________________________

轉:https://blog.csdn.net/yushensyc/article/details/79638115

TensorFlow的文件保存與讀取——variables_to_restore函數

轉,原創詳見: http://blog.csdn.net/sinat_29957455/article/details/78508793

variables_to_restore函數,是TensorFlow為滑動平均值提供。之前,也介紹過通過使用滑動平均值可以讓神經網絡模型更加的健壯。我們也知道,其實在TensorFlow中,變量的滑動平均值都是由影子變量所維護的,如果你想要獲取變量的滑動平均值需要獲取的是影子變量而不是變量本身。

1、滑動平均值模型文件的保存

 

[python]  view plain  copy
 
  1. import tensorflow as tf  
  2.   
  3. if __name__ == "__main__":  
  4.     v = tf.Variable(0.,name="v")  
  5.     #設置滑動平均模型的系數  
  6.     ema = tf.train.ExponentialMovingAverage(0.99)  
  7.     #設置變量v使用滑動平均模型,tf.all_variables()設置所有變量  
  8.     op = ema.apply([v])  
  9.     #獲取變量v的名字  
  10.     print(v.name)  
  11.     #v:0  
  12.     #創建一個保存模型的對象  
  13.     save = tf.train.Saver()  
  14.     sess = tf.Session()  
  15.     #初始化所有變量  
  16.     init = tf.initialize_all_variables()  
  17.     sess.run(init)  
  18.     #給變量v重新賦值  
  19.     sess.run(tf.assign(v,10))  
  20.     #應用平均滑動設置  
  21.     sess.run(op)  
  22.     #保存模型文件  
  23.     save.save(sess,"./model.ckpt")  
  24.     #輸出變量v之前的值和使用滑動平均模型之后的值  
  25.     print(sess.run([v,ema.average(v)]))  
  26.     #[10.0, 0.099999905]  
上面的代碼,是如何來保存一個滑動平均值的模型文件,之前有介紹過滑動平均值和模型文件的保存,所以這里就不再重復了。

 

2、滑動平均值模型文件的讀取

 

[python]  view plain  copy
 
  1. v = tf.Variable(1.,name="v")  
  2. #定義模型對象  
  3. saver = tf.train.Saver({"v/ExponentialMovingAverage":v})  
  4. sess = tf.Session()  
  5. saver.restore(sess,"./model.ckpt")  
  6. print(sess.run(v))  
  7. #0.0999999  
對於模型文件的讀取,在上一篇博客中有介紹過,這里特別需要注意的一個地方就是,在使用tf.train.Saver函數中,所傳遞的模型參數是{"v/ExponentialMovingAverage":v}而不是{"v":v},如果你使用的是后面的參數,那么你得到的結果將是10而不是0.09,那是因為后者獲取的是變量本身而不是影子變量。是不是感覺使用這種方式來讀取模型文件的時候,還需要輸入一大串的變量名稱。

 

3、variables_to_restore函數的使用

 

[python]  view plain  copy
 
  1. v = tf.Variable(1.,name="v")  
  2. #滑動模型的參數的大小並不會影響v的值  
  3. ema = tf.train.ExponentialMovingAverage(0.99)  
  4. print(ema.variables_to_restore())  
  5. #{'v/ExponentialMovingAverage': <tf.Variable 'v:0' shape=() dtype=float32_ref>}  
  6. sess = tf.Session()  
  7. saver = tf.train.Saver(ema.variables_to_restore())  
  8. saver.restore(sess,"./model.ckpt")  
  9. print(sess.run(v))  
  10. #0.0999999  
通過使用variables_to_restore函數,可以使在加載模型的時候將影子變量直接映射到變量的本身,所以我們在獲取變量的滑動平均值的時候只需要獲取到變量的本身值而不需要去獲取影子變量。
 
________________________________________________________
 


免責聲明!

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



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