請參閱變量指南。
繼承自: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_value
Tensor
或可轉換為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_def
VariableDef
協議緩衝區。如果不是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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。