tf.variable_scope(name_or_scope,default_name=None,values=None,initializer=None,regularizer=None,caching_device=None,partitioner=None,custom_getter=None,reuse=None,dtype=None)
返回一個用於定義創建variable(層)的op的上下文管理器。
該上下文管理器驗證(可選)值來自同一圖形,確保圖形是默認圖形,並推送名稱范圍和variable范圍。
如果name_or_scope不為None,則按原樣使用。 如果范圍為None,則使用default_name。 在這種情況下,如果以前在同一個范圍內使用了相同的名稱,那么它將會被唯一的附加到_N。
可變范圍允許創建新的variable並分享已創建的variable,同時提供檢查,不會意外創建或共享。 有關詳細信息,請參閱可變范圍如何操作,這里我們僅提供幾個基本示例。
如何創建新variable的簡單示例:
with tf.variable_scope("foo"): with tf.variable_scope("bar"): v = tf.get_variable("v", [1]) assert v.name == "foo/bar/v:0"
- 1
- 2
- 3
- 4
共享variable的基本示例:
with tf.variable_scope("foo"): v = tf.get_variable("v", [1]) with tf.variable_scope("foo", reuse=True): v1 = tf.get_variable("v", [1]) assert v1 == v
- 1
- 2
- 3
- 4
- 5
通過捕獲范圍並設置重用來共享variable:
with tf.variable_scope("foo") as scope: v = tf.get_variable("v", [1]) scope.reuse_variables() v1 = tf.get_variable("v", [1]) assert v1 == v
- 1
- 2
- 3
- 4
- 5
為了防止意外共享variable,當在非重用范圍內獲取現有variable時,我們引發異常。
with tf.variable_scope("foo"): v = tf.get_variable("v", [1]) v1 = tf.get_variable("v", [1]) # Raises ValueError("... v already exists ...").
- 1
- 2
- 3
- 4
同樣,當嘗試獲取在重用模式下不存在的variable時,我們引發異常。
with tf.variable_scope("foo", reuse=True): v = tf.get_variable("v", [1]) # Raises ValueError("... v does not exists ...").
- 1
- 2
- 3
請注意,重用標志是繼承的:如果我們打開一個重用的范圍,那么它的所有子范圍也會變得重用。
ARGS:
name_or_scope:string或VariableScope:要打開的范圍。 default_name:如果name_or_scope參數為None,則將使用默認名稱,此名稱將被唯一。 如果提供了name_or_scope,它將不會被使用,因此它不是必需的,可以是None。 值:傳遞給op函數的Tensor參數列表。 初始化器:此范圍內的變量的默認初始化程序。 regularizer:此范圍內的變量的默認正則符。 caching_device:此范圍內的變量的默認緩存設備。 partitioner:此范圍內變量的默認分區。 custom_getter:此范圍內變量的默認定制getter。 重用:True或None 如果是,我們進入該范圍以及所有子范圍的重用模式; 如果沒有,我們只是繼承父范圍重用。 dtype:在此范圍中創建的變量類型(默認為傳遞范圍中的類型,或從父范圍繼承)