TensorFlow入門 - 變數(Variables)
訓練模型時,需要使用變數(Variables)儲存和更新引數。Variables是包含張量(tensor)的記憶體緩衝。變數必須要先被初始化(initialize),而且可以在訓練時和訓練後儲存(save)到磁碟中。之後可以再恢復(restore)儲存的變數值來訓練和測試模型。
主要參考一下兩類:
- The tf.Variable class.
- The tf.train.Saver class.
1.建立(Creation)
建立Variable,需將一個tensor傳遞給Variable()建構函式。可以使用TensorFlow提供的許多ops(操作)初始化張量,參考constants or random values。這些ops都要求指定tensor的shape(形狀)。比如
Create two variables.
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),
name=”weights”)
biases = tf.Variable(tf.zeros([200]), name=”biases”)
呼叫tf.Variable()函式在graph中增加以下幾個ops:
- 一個Variable op ,負責儲存變數值。
- 一個initializer op,負責將變數設為初始值,這實際是tf.assign op。
- 初始值的op,比如zeros op 。
tf.Variable()返回一個tf.Variable類的例項。
2.裝置安置(Device placement)
使用 with tf.device(…): block,將一個變數安置在一個裝置上。
Pin a variable to CPU.
with tf.device(“/cpu:0”):
v = tf.Variable(…)Pin a variable to GPU.
with tf.device(“/gpu:0”):
v = tf.Variable(…)Pin a variable to a particular parameter server task.
with tf.device(“/job:ps/task:7”):
v = tf.Variable(…)
改變變數的一些ops,比如v.assign()和tf.train.Optimizer需要與變數在同一個裝置上。
3.初始化(Initialization)
在執行模型中其他操作之前,必須先對變數進行初始化。最簡單的初始化方法是新增一個對所有變數進行初始化的op,然後再使用model前執行此op。
3.1全域性初始化
使用tf.global_variables_initializer()新增一個op來執行初始化。要在完全構建完模型後,在一個對話(Session)中執行它。
Create two variables.
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),
name=”weights”)
biases = tf.Variable(tf.zeros([200]), name=”biases”)
…Add an op to initialize the variables.
init_op = tf.global_variables_initializer()
Later, when launching the model
with tf.Session() as sess:
# Run the init operation.
sess.run(init_op)
…
# Use the model
…
3.2 用其他變數值建立變數
用變數A的值初始化另一個變數B,需使用變數A的屬性(property)initialized_value()。可以直接使用變數A的初始值,也可以用之計算新的值。
Create a variable with a random value.
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),
name=”weights”)Create another variable with the same value as ‘weights’.
w2 = tf.Variable(weights.initialized_value(), name=”w2”)
Create another variable with twice the value of ‘weights’
w_twice = tf.Variable(weights.initialized_value() * 2.0, name=”w_twice”)
3.3自定義初始化
可以給tf.global_variables_initializer()新增一個顯示列表自定義要初始化的變數。參考Variables Documentation瞭解更多。
4.儲存和恢復Saving and Restoring
最簡單的方法是用tf.train.Saver物件,此建構函式在graph中為所有變數(or a specified list)新增save和restore ops。saver物件提供執行這些ops的方法,並指定讀寫checkpoint files的路徑。
4.1 checkpoint檔案
變數儲存在一個二進位制檔案中,包含從變數名稱到張量值的對映。
建立checkpoint files時,可以選擇性地選擇變數名稱來儲存。預設情況,它使用每個Variable的Variable.name屬性。
可以使用inspect_checkpoint庫檢視checkpoint file中的變數,還有print_tensrs_in_checkpoint_file函式。
4.2儲存變數
用tf.train.Saver()建立一個Saver物件來管理模型中所有變數。
Create some variables.
v1 = tf.Variable(…, name=”v1”)
v2 = tf.Variable(…, name=”v2”)
…Add an op to initialize the variables.
init_op = tf.global_variables_initializer()
Add ops to save and restore all the variables.
saver = tf.train.Saver()
Later, launch the model, initialize the variables, do some work, save the variables to disk.
with tf.Session() as sess:
sess.run(init_op)Do some work with the model.
..
Save the variables to disk.
save_path = saver.save(sess, “/tmp/model.ckpt”)
print(“Model saved in file: %s” % save_path)
先初始化變數,再操作模型,最後儲存變數。
4.3恢復變數
使用同樣的Saver物件恢復變數,恢復變數時,就不用先初始化變數了。
Create some variables.
v1 = tf.Variable(…, name=”v1”)
v2 = tf.Variable(…, name=”v2”)
…Add ops to save and restore all the variables.
saver = tf.train.Saver()
Later, launch the model, use the saver to restore variables from disk, and
do some work with the model.
with tf.Session() as sess:
Restore variables from disk.
saver.restore(sess, “/tmp/model.ckpt”)
print(“Model restored.”)Do some work with the model
…
無初始化操作,先恢復變數,再操模型。
4.4選擇儲存和恢復的變數
如果不給tf.train.Saver傳遞任何引數,Saver會在graph中處理所有變數。每個變數會存在他們建立時的name下。
通過給tf.train.Saver傳遞一個Python字典,可以指定儲存變數的name。key是要在checkpoint file中使用的name, values指要管理的變數。
注意:
-
可以建立多個saver,分別儲存不同的變數集合。
-
如果在對話開始時,只恢復了部分變數,就要對其他變數執行initializer op。參考tf.variables_initializer()
Create some variables.
v1 = tf.Variable(…, name=”v1”)
v2 = tf.Variable(…, name=”v2”)
…
Add ops to save and restore only ‘v2’ using the name “my_v2”
saver = tf.train.Saver({“my_v2”: v2})
Use the saver object normally after that.
…
【本文轉載自:深度學習實踐,原文連結:https://mp.weixin.qq.com/s/B59uqKZ3aZSpfzXC2lswtA】
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31542119/viewspace-2212517/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Task 04 變數與函式 Variables and Functions變數函式Function
- tensorflow入門
- TensorFlow變數管理變數
- TensorFlow入門文章
- TensorFlow 入門 上(自用)
- TensorFlow 入門 下(自用)
- FastAPI(64)- Settings and Environment Variables 配置項和環境變數ASTAPI變數
- 概率論與梳理統計-隨機變數random variables隨機變數random
- Shell 入門系列 (一): 變數變數
- Go 快速入門指南 - 變數Go變數
- C++入門教程(20):變數、不變數和常量C++變數
- Tensorflow學習筆記: 變數及共享變數筆記變數
- Go 語言入門教程:變數Go變數
- TensorFlow 入門(MNIST資料集)
- Tensorflow 2.x入門教程
- Go 入門 – 包,函式和變數Go函式變數
- TypeScript基礎入門-變數宣告(一)TypeScript變數
- 【廖雪峰python入門筆記】變數Python筆記變數
- [MySQL光速入門]016 圖解變數MySql圖解變數
- Go 快速入門指南 - 變長引數Go
- TensorFlow——共享變數的使用方法變數
- variables_order引數詳解
- 深度學習:TensorFlow入門實戰深度學習
- 《MySQL 入門教程》第 17 篇 MySQL 變數MySql變數
- C++入門教程之二:變數C++變數
- Java自學入門之靜態變數Java變數
- [原始碼解析] TensorFlow 之 分散式變數原始碼分散式變數
- Java入門系列-04-java中的變數Java變數
- Python入門——變數和常見的運算子Python變數
- ECMAScript 6入門 - 變數的解構賦值變數賦值
- [譯] IBM 工程師的 TensorFlow 入門指北IBM工程師
- 面向初學者的快速入門tensorflow
- Python快速入門第二彈合法的變數名Python變數
- TensorFlow入門簡介,新手請看這裡!
- ES6入門之變數的解構賦值變數賦值
- Python入門(十八):變數作用域與巢狀函式Python變數巢狀函式
- Python入門第7課——tuple變數(只讀課堂)Python變數
- Python 3 快速入門 1 —— 資料型別與變數Python資料型別變數