1. 程式人生 > >TensorFlow函式——tf.variable( )

TensorFlow函式——tf.variable( )

(本文是翻譯TensorFlow官網中的tf.variable()函式)

(變數):建立,初始化,儲存和載入
您可以通過構造類Variable的例項向圖中新增變數。

Variable()建構函式需要變數的初始值,它可以是任何型別和形狀的Tensor(張量)。 初始值定義變數的型別和形狀。 施工後,變數的型別和形狀是固定的。 該值可以使用其中一種賦值方式進行更改。

如果要稍後更改變數的形狀,則必須使用帶有validate_shape = False的賦值操作。

就像任何Tensor(張量)一樣,使用Variable()建立的變數可以用作圖中其他操作的輸入。 另外,Tensor類過載的所有操作符都被轉載到變數中,所以您也可以通過對變數進行算術,將節點新增到圖形中。

import tensorflow as tf
# Create a variable.(建立一個變數)
w = tf.Variable(<initial-value>, name=<optional-name>)
# Use the variable in the graph like any Tensor.(使用圖形中的變數,如任何張量.)
y = tf.matmul(w, ...another variable or tensor...)(tf.matmul引數為w,其他變數或張量)
# The overloaded operators are available too.(過載運算子也可用。)
z = tf.sigmoid(w + y)
# Assign a new
value to the variable with `assign()` or a related method. #使用`assign()'或相關方法為變數賦值一個新值。 w.assign(w + 1.0) w.assign_add(1.0)

當您啟動圖時,Variables(變數)必須被明確的初始化在你使用它們的值進行操作之前,你可以通過1執行其初始化器操作初始化variables,2從儲存檔案中還原variable,或者3僅僅執行一個賦值操作給variable賦值。實際上,variable初始化器操作只是賦值操作,賦值variable自己的初始化值給他自己(In fact, the variable initializer op is just an assign Op that assigns the variable’s initial value to the variable itself.)

# Launch the graph in a session.(在會話中啟動圖形)
with tf.Session() as sess:    
    # Run the variable initializer.(執行variable初始化器。)
sess.run(w.initializer)    
# ...you now can run ops that use the value of 'w'...(你現在可以執行使用'w'值的進行操作)

最常見的初始化模式是使用一個便利函式global_variables_initializer( ),將一個可以初始化所有variable的操作新增到圖中(the graph)。然後啟動圖(graph)後執行該操作

# Add an Op to initialize global variables.(新增一個操作去初始化所以variable)
init_op = tf.global_variables_initializer()

# Launch the graph in a session.(在一個session中啟動圖)
with tf.Session() as sess:    
    # Run the Op that initializes global variables.(執行初始化全域性Variable的操作)
sess.run(init_op)    
# ...you can now run any Op that uses variable values...(現在你可以執行所有使用任何variable值的操作)

如果需要建立一個取決於另一個variable的初始值的variable,請使用另一個variable的initialized_value()。 這樣可以確保以正確的順序初始化變數。(下面僅是在官網找的一個例子,詳細的可以去官網查一下這個函式)

# Initialize 'v' with a random tensor.
v = tf.Variable(tf.truncated_normal([10, 40]))
# Use `initialized_value` to guarantee that `v` has been
# initialized before its value is used to initialize `w`.
# The random values are picked only once.
w = tf.Variable(v.initialized_value() * 2.0

所有variables都會自動收集到建立它們的圖中。 預設情況下,建構函式將新變數新增到Graph集合GraphKeys.GLOBAL_VARIABLES。 這個便利函式global_variables()返回該集合的內容。

在構建機器學習模型時,通常可以方便地區分儲存可訓練模型引數的variable(變數)和其他variable,例如用於計算訓練步驟的全域性步長variable(變數)。為了使這更容易,變數建構函式支援trainable = 引數。如果為True,則新variable也將新增到圖集合GraphKeys.TRAINABLE_VARIABLES中。

便利函式trainable_variables()返回此集合的內容。 各種Optimizer類使用此集合作為要優化的變數的預設列表。