請參閱變量指南。
繼承自:Variable
用法
tf.compat.v1.Variable(
initial_value=None, trainable=None, collections=None, validate_shape=True,
caching_device=None, name=None, variable_def=None, dtype=None,
expected_shape=None, import_scope=None, constraint=None, use_resource=None,
synchronization=tf.VariableSynchronization.AUTO,
aggregation=tf.compat.v1.VariableAggregation.NONE, shape=None
)參數
-
initial_valueTensor或可轉換為Tensor的 Python 對象,這是變量的初始值。除非validate_shape設置為 False,否則初始值必須具有指定的形狀。也可以是不帶參數的可調用對象,在調用時返回初始值。在這種情況下,必須指定dtype。 (請注意,init_ops.py 中的初始化函數必須先綁定到形狀,然後才能在此處使用。) -
trainable如果True,還將變量添加到圖形集合GraphKeys.TRAINABLE_VARIABLES。此集合用作Optimizer類使用的默認變量列表。默認為True,除非synchronization設置為ON_READ,在這種情況下它默認為False。 -
collections圖集合鍵列表。新變量將添加到這些集合中。默認為[GraphKeys.GLOBAL_VARIABLES]。 -
validate_shape如果False,允許使用未知形狀的值初始化變量。如果True是默認值,則必須知道initial_value的形狀。 -
caching_device可選的設備字符串,說明應緩存變量以供讀取的位置。默認為變量的設備。如果不是None,則緩存在另一台設備上。典型用途是在使用變量的操作所在的設備上進行緩存,通過Switch和其他條件語句進行重複數據刪除。 -
name變量的可選名稱。默認為'Variable'並自動獲取唯一性。 -
variable_defVariableDef協議緩衝區。如果不是None,則使用其內容重新創建變量對象,引用圖中必須已經存在的變量節點。圖表沒有改變。variable_def和其他參數是互斥的。 -
dtype如果設置,initial_value 將被轉換為給定的類型。如果None,或者保留數據類型(如果initial_value是張量),或者convert_to_tensor將決定。 -
expected_shape張量形狀。如果設置,initial_value 預計將具有此形狀。 -
import_scope可選string。要添加到Variable.的名稱範圍僅在從協議緩衝區初始化時使用。 -
constraint由Optimizer更新後應用於變量的可選投影函數(例如,用於實現層權重的範數約束或值約束)。該函數必須將表示變量值的未投影張量作為輸入,並返回投影值的張量(必須具有相同的形狀)。在進行異步分布式訓練時使用約束是不安全的。 -
use_resource是否使用資源變量。 -
synchronization指示何時聚合分布式變量。接受的值是在類tf.VariableSynchronization中定義的常量。默認情況下,同步設置為AUTO,當前的DistributionStrategy選擇何時同步。 -
aggregation指示如何聚合分布式變量。接受的值是在類tf.VariableAggregation中定義的常量。 -
shape(可選)此變量的形狀。如果沒有,將使用initial_value的形狀。當將此參數設置為tf.TensorShape(None)(表示未指定的形狀)時,可以為變量分配不同形狀的值。
拋出
-
ValueError如果同時指定variable_def和 initial_value。 -
ValueError如果未指定初始值,或沒有形狀且validate_shape為True。 -
RuntimeError如果啟用了即刻執行。
屬性
-
aggregation -
constraint返回與此變量關聯的約束函數。 -
device此變量的設備。 -
dtype該變量的DType。 -
graph該變量的Graph。 -
initial_value返回用作變量初始值的張量。請注意,這與
initialized_value()不同,後者在返回其值之前運行初始化變量的操作。此方法返回初始化變量的操作所使用的張量。 -
initializer此變量的初始化操作。 -
name此變量的名稱。 -
op該變量的Operation。 -
shape該變量的TensorShape。 -
synchronization -
trainable
變量在對 run() 的調用中維護圖中的狀態。您可以通過構造類 Variable 的實例將變量添加到圖形中。
Variable() 構造函數需要變量的初始值,它可以是任何類型和形狀的 Tensor。初始值定義變量的類型和形狀。構造後,變量的類型和形狀是固定的。可以使用其中一種分配方法更改該值。
如果以後要更改變量的形狀,則必須將 assign Op 與 validate_shape=False 一起使用。
就像任何 Tensor 一樣,使用 Variable() 創建的變量可以用作圖中其他 Ops 的輸入。此外,為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...)
# The overloaded operators are available too.
z = tf.sigmoid(w + y)
# Assign a new value to the variable with `assign()` or a related method.
w.assign(w + 1.0)
w.assign_add(1.0)
啟動圖表時,必須明確初始化變量,然後才能運行使用其值的操作。您可以通過運行其初始化程序操作、從保存文件恢複變量或簡單地運行一個變量來初始化一個變量assign為變量賦值的操作。事實上,變量初始化操作隻是一個assign將變量的初始值分配給變量本身的操作。
# Launch the graph in a session.
with tf.compat.v1.Session() as sess:
# Run the variable initializer.
sess.run(w.initializer)
# ...you now can run ops that use the value of 'w'...
最常見的初始化模式是使用便利函數global_variables_initializer() 將 Op 添加到初始化所有變量的圖中。然後在啟動圖表後運行該操作。
# Add an Op to initialize global variables.
init_op = tf.compat.v1.global_variables_initializer()
# Launch the graph in a session.
with tf.compat.v1.Session() as sess:
# Run the Op that initializes global variables.
sess.run(init_op)
# ...you can now run any Op that uses variable values...
如果您需要創建一個初始值依賴於另一個變量的變量,請使用另一個變量的 initialized_value() 。這可確保以正確的順序初始化變量。
所有變量都會自動收集在創建它們的圖表中。默認情況下,構造函數將新變量添加到圖形集合 GraphKeys.GLOBAL_VARIABLES 。便利函數global_variables() 返回該集合的內容。
在構建機器學習模型時,通常可以方便地區分包含可訓練模型參數的變量和其他變量,例如用於計算訓練步數的 global step 變量。為了使這更容易,變量構造函數支持trainable=<bool> 參數。如果 True ,新變量也會添加到圖形集合 GraphKeys.TRAINABLE_VARIABLES 。便利函數trainable_variables() 返回此集合的內容。各種Optimizer 類使用此集合作為要優化的變量的默認列表。
警告:tf.Variable 對象默認具有非直觀的內存模型。變量在內部表示為可變張量,它可以不確定地為圖中的其他張量起別名。消耗變量並可能導致別名的操作集是不確定的,並且可以在不同的 TensorFlow 版本中更改。避免編寫依賴於變量值的代碼,無論其他操作發生時發生變化或不變化。例如,在tf.cond 中使用變量對象或其簡單函數作為謂詞是危險的,並且error-prone:
v = tf.Variable(True)
tf.cond(v, lambda:v.assign(False), my_false_fn) # Note:this is broken.
在這裏,在構造變量時添加 use_resource=True 將解決任何不確定性問題:
v = tf.Variable(True, use_resource=True)
tf.cond(v, lambda:v.assign(False), my_false_fn)
要使用沒有這些問題的變量的替換:
- 構造
tf.Variable時添加use_resource=True; - 在
tf.compat.v1.get_variable()調用之前,在tf.compat.v1.variable_scope中調用tf.compat.v1.get_variable_scope().set_use_resource(True)。
子類
相關用法
- Python tf.compat.v1.Variable.eval用法及代碼示例
- Python tf.compat.v1.Variable.initialized_value用法及代碼示例
- Python tf.compat.v1.Variable.__getitem__用法及代碼示例
- Python tf.compat.v1.Variable.__rmatmul__用法及代碼示例
- Python tf.compat.v1.Variable.__ge__用法及代碼示例
- Python tf.compat.v1.Variable.__pow__用法及代碼示例
- Python tf.compat.v1.Variable.scatter_nd_update用法及代碼示例
- Python tf.compat.v1.Variable.__le__用法及代碼示例
- Python tf.compat.v1.Variable.__rpow__用法及代碼示例
- Python tf.compat.v1.Variable.load用法及代碼示例
- Python tf.compat.v1.Variable.scatter_nd_add用法及代碼示例
- Python tf.compat.v1.Variable.__gt__用法及代碼示例
- Python tf.compat.v1.Variable.scatter_nd_sub用法及代碼示例
- Python tf.compat.v1.Variable.ref用法及代碼示例
- Python tf.compat.v1.Variable.__sub__用法及代碼示例
- Python tf.compat.v1.Variable.__abs__用法及代碼示例
- Python tf.compat.v1.Variable.__matmul__用法及代碼示例
- Python tf.compat.v1.Variable.__lt__用法及代碼示例
- Python tf.compat.v1.Variable.__rsub__用法及代碼示例
- Python tf.compat.v1.distributions.Multinomial.stddev用法及代碼示例
注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.compat.v1.Variable。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
