人工智能AI培訓_TensorFlow 變量
1.變量概念
變量維護圖執行過程中的狀態信息。如在神經網絡中,用于標識w、b等系數。變量其實是Python中的Variable對象。TensorFlow中變量的初始值可以設置成隨機數、常數或者是通過其他變量的初始值計算得到。
在TensorFlow中,變量(Variable)是特殊的張量(Tensor),它的值可以是一個任何類型和形狀的張量。與其他張量不同,變量存在于單個 session.run 調用的上下文之外,也就是說,變量存儲的是持久張量,當訓練模型時,用變量來存儲和更新參數。變量包含張量 (Tensor)存放于內存的緩存區。建模時它們需要被明確地初始化,模型訓練后它們必須被存儲到磁盤。這些變量的值可在之后模型訓練和分析是被加載。除此之外,在調用op之前,所有變量都應被顯式地初始化過。
2.創建變量
當創建一個變量時,你將一個張量作為初始值傳入構造函數Variable()。TensorFlow提供了一系列操作符來初始化張量,初始值是常量或是隨機值。
注意,所有這些操作符都需要你指定張量的shape。那個形狀自動成為變量的shape。變量的shape通常是固定的,但TensorFlow提供了高級的機制來重新調整其行列數。
# 創建兩個變量.
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),name="weights")
biases = tf.Variable(tf.zeros([200]), name="biases")
調用tf.Variable()添加一些操作(Op, operation)到graph:
一個Variable操作存放變量的值。
一個初始化op將變量設置為初始值。這事實上是一個tf.assign操作.
初始值的操作,例如示例中對biases變量的zeros操作也被加入了graph。
tf.Variable的返回值是Python的tf.Variable類的一個實例。
3.變量初始化
創建好變量之后,變量必須初始化。變量的初始化必須在模型的其它操作運行之前先明確地完成。最簡單的方法就是添加一個給所有變量初始化的操作,并在使用模型之前首先運行那個操作。你或者可以從檢查點文件中重新獲取變量值,詳見下文。
使用tf.initialize_all_variables()添加一個操作對變量做初始化。記得在完全構建好模型并加載之后再運行那個操作。
4.保存和加載
最簡單的保存和恢復模型的方法是使用tf.train.Saver對象。構造器給graph的所有變量,或是定義在列表里的變量,添加save和restoreops。saver對象提供了方法來運行這些ops,定義檢查點文件的讀寫路徑。
5.檢查點文件
變量存儲在二進制文件里,主要包含從變量名到tensor值的映射關系。
當你創建一個Saver對象時,你可以選擇性地為檢查點文件中的變量挑選變量名。默認情況下,將每個變量Variable.name屬性的值。
6.保存變量
7.恢復變量
用同一個Saver對象來恢復變量。注意,當你從文件中恢復變量時,不需要事先對它們做初始化。
8.選擇存儲和恢復哪些變量
如果你不給tf.train.Saver()傳入任何參數,那么saver將處理graph中的所有變量。其中每一個變量都以變量創建時傳入的名稱被保存。
有時候在檢查點文件中明確定義變量的名稱很有用。舉個例子,你也許已經訓練得到了一個模型,其中有個變量命名為"weights",你想把它的值恢復到一個新的變量"params"中。
有時候僅保存和恢復模型的一部分變量很有用。再舉個例子,你也許訓練得到了一個5層神經網絡,現在想訓練一個6層的新模型,可以將之前5層模型的參數導入到新模型的前5層中。
你可以通過給tf.train.Saver()構造函數傳入Python字典,很容易地定義需要保持的變量及對應名稱:鍵對應使用的名稱,值對應被管理的變量。
注意:
如果需要保存和恢復模型變量的不同子集,可以創建任意多個saver對象。同一個變量可被列入多個saver對象中,只有當saver的restore()函數被運行時,它的值才會發生改變。
如果你僅在session開始時恢復模型變量的一個子集,你需要對剩下的變量執行初始化op。