TensorFlow函數(shù):tf.variable_scope

2018-04-17 10:14 更新

tf.variable_scope函數(shù)

variable_scope類

定義在:tensorflow/python/ops/variable_scope.py

請(qǐng)參閱指南:變量>共享變量

用于定義創(chuàng)建變量(層)的操作的上下文管理器.

此上下文管理器驗(yàn)證(可選)values是否來自同一圖形,確保圖形是默認(rèn)的圖形,并推送名稱范圍和變量范圍.

如果name_or_scope不是None,則使用as is.如果scope是None,則使用default_name.在這種情況下,如果以前在同一范圍內(nèi)使用過相同的名稱,則通過添加_N來使其具有唯一性.

變量范圍允許您創(chuàng)建新變量并共享已創(chuàng)建的變量,同時(shí)提供檢查以防止意外創(chuàng)建或共享.在本文中我們提供了幾個(gè)基本示例.

示例1-如何創(chuàng)建一個(gè)新變量:

with tf.variable_scope("foo"):
    with tf.variable_scope("bar"):
        v = tf.get_variable("v", [1])
        assert v.name == "foo/bar/v:0"

示例2-共享變量AUTO_REUSE:

def foo():
  with tf.variable_scope("foo", reuse=tf.AUTO_REUSE):
    v = tf.get_variable("v", [1])
  return v

v1 = foo()  # Creates v.
v2 = foo()  # Gets the same, existing v.
assert v1 == v2

示例3-使用reuse=True共享變量:

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

示例4-通過捕獲范圍并設(shè)置重用來共享變量:

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

為了防止意外共享變量,我們在獲取非重用范圍中的現(xiàn)有變量時(shí)引發(fā)異常.

with tf.variable_scope("foo"):
    v = tf.get_variable("v", [1])
    v1 = tf.get_variable("v", [1])
    #  Raises ValueError("... v already exists ...")

同樣,我們在嘗試獲取重用模式中不存在的變量時(shí)引發(fā)異常.

with tf.variable_scope("foo", reuse=True):
    v = tf.get_variable("v", [1])
    #  Raises ValueError("... v does not exists ...")

請(qǐng)注意,reuse(重用)標(biāo)志是有繼承性的:如果我們打開一個(gè)重用范圍,那么它的所有子范圍也會(huì)重用.

關(guān)于名稱范圍的說明:設(shè)置reuse不會(huì)影響其他操作(如多重)的命名.

請(qǐng)注意,1.0版本開始(包含)允許(雖然明確勸阻)將False傳遞給重用參數(shù),從而產(chǎn)生與None無關(guān)的未記錄行為.從1.1.0版本開始傳遞None和False作為重用具有完全相同的效果.

方法

__init__

__init__(
    name_or_scope,
    default_name=None,
    values=None,
    initializer=None,
    regularizer=None,
    caching_device=None,
    partitioner=None,
    custom_getter=None,
    reuse=None,
    dtype=None,
    use_resource=None,
    constraint=None,
    auxiliary_name_scope=True
)

用于初始化上下文管理器.

參數(shù):

  • name_or_scope:string或者VariableScope表示打開的范圍.
  • default_name:如果name_or_scope參數(shù)為None,則使用默認(rèn)的名稱,該名稱將是唯一的;如果提供了name_or_scope,它將不會(huì)被使用,因此它不是必需的,并且可以是None.
  • values:傳遞給操作函數(shù)的Tensor參數(shù)列表.
  • initializer:此范圍內(nèi)變量的默認(rèn)初始值設(shè)定項(xiàng).
  • regularizer:此范圍內(nèi)變量的默認(rèn)正規(guī)化器.
  • caching_device:此范圍內(nèi)變量的默認(rèn)緩存設(shè)備.
  • partitioner:此范圍內(nèi)變量的默認(rèn)分區(qū)程序.
  • custom_getter:此范圍內(nèi)的變量的默認(rèn)自定義吸氣.
  • reuse:可以是True、None或tf.AUTO_REUSE;如果是True,則我們進(jìn)入此范圍的重用模式以及所有子范圍;如果是tf.AUTO_REUSE,則我們創(chuàng)建變量(如果它們不存在),否則返回它們;如果是None,則我們繼承父范圍的重用標(biāo)志.當(dāng)啟用緊急執(zhí)行時(shí),該參數(shù)總是被強(qiáng)制為tf.AUTO_REUSE.
  • dtype:在此范圍中創(chuàng)建的變量類型(默??認(rèn)為傳入范圍中的類型,或從父范圍繼承).
  • use_resource:如果為false,則所有變量都將是常規(guī)變量;如果為true,則將使用具有明確定義的語義的實(shí)驗(yàn)性 ResourceVariables.默認(rèn)為false(稍后將更改為true).當(dāng)啟用緊急執(zhí)行時(shí),該參數(shù)總是被強(qiáng)制為true.
  • constraint:一個(gè)可選的投影函數(shù),在被Optimizer(例如用于實(shí)現(xiàn)層權(quán)重的范數(shù)約束或值約束)更新之后應(yīng)用于該變量.該函數(shù)必須將代表變量值的未投影張量作為輸入,并返回投影值的張量(它必須具有相同的形狀).進(jìn)行異步分布式培訓(xùn)時(shí),約束條件的使用是不安全的.
  • auxiliary_name_scope:如果為True,則我們用范圍創(chuàng)建一個(gè)輔助名稱范圍;如果為False,則我們不接觸名稱范圍.

返回值:

返回可以捕獲和重用的范圍.

可能引發(fā)的異常:

  • ValueError:在創(chuàng)建范圍內(nèi)嘗試重用時(shí),或在重用范圍內(nèi)創(chuàng)建時(shí).
  • TypeError:某些參數(shù)的類型不合適時(shí).

__enter__

__enter__()

__exit__

__exit__(
    type_arg,
    value_arg,
    traceback_arg
)
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)