當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python tf.compat.v1.Variable用法及代碼示例

請參閱變量指南。

繼承自: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_shapeTrue
  • 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)

要使用沒有這些問題的變量的替換:

子類

class SaveSliceInfo

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.compat.v1.Variable。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。