TensorFlow函数:tf.variable_scope

2018-04-17 10:14 更新

tf.variable_scope函数

variable_scope类

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

请参阅指南:变量>共享变量

用于定义创建变量(层)的操作的上下文管理器.

此上下文管理器验证(可选)values是否来自同一图形,确保图形是默认的图形,并推送名称范围和变量范围.

如果name_or_scope不是None,则使用as is.如果scope是None,则使用default_name.在这种情况下,如果以前在同一范围内使用过相同的名称,则通过添加_N来使其具有唯一性.

变量范围允许您创建新变量并共享已创建的变量,同时提供检查以防止意外创建或共享.在本文中我们提供了几个基本示例.

示例1-如何创建一个新变量:

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-通过捕获范围并设置重用来共享变量:

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

为了防止意外共享变量,我们在获取非重用范围中的现有变量时引发异常.

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

同样,我们在尝试获取重用模式中不存在的变量时引发异常.

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

请注意,reuse(重用)标志是有继承性的:如果我们打开一个重用范围,那么它的所有子范围也会重用.

关于名称范围的说明:设置reuse不会影响其他操作(如多重)的命名.

请注意,1.0版本开始(包含)允许(虽然明确劝阻)将False传递给重用参数,从而产生与None无关的未记录行为.从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
)

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

参数:

  • name_or_scope:string或者VariableScope表示打开的范围.
  • default_name:如果name_or_scope参数为None,则使用默认的名称,该名称将是唯一的;如果提供了name_or_scope,它将不会被使用,因此它不是必需的,并且可以是None.
  • values:传递给操作函数的Tensor参数列表.
  • initializer:此范围内变量的默认初始值设定项.
  • regularizer:此范围内变量的默认正规化器.
  • caching_device:此范围内变量的默认缓存设备.
  • partitioner:此范围内变量的默认分区程序.
  • custom_getter:此范围内的变量的默认自定义吸气.
  • reuse:可以是True、None或tf.AUTO_REUSE;如果是True,则我们进入此范围的重用模式以及所有子范围;如果是tf.AUTO_REUSE,则我们创建变量(如果它们不存在),否则返回它们;如果是None,则我们继承父范围的重用标志.当启用紧急执行时,该参数总是被强制为tf.AUTO_REUSE.
  • dtype:在此范围中创建的变量类型(默​​认为传入范围中的类型,或从父范围继承).
  • use_resource:如果为false,则所有变量都将是常规变量;如果为true,则将使用具有明确定义的语义的实验性 ResourceVariables.默认为false(稍后将更改为true).当启用紧急执行时,该参数总是被强制为true.
  • constraint:一个可选的投影函数,在被Optimizer(例如用于实现层权重的范数约束或值约束)更新之后应用于该变量.该函数必须将代表变量值的未投影张量作为输入,并返回投影值的张量(它必须具有相同的形状).进行异步分布式培训时,约束条件的使用是不安全的.
  • auxiliary_name_scope:如果为True,则我们用范围创建一个辅助名称范围;如果为False,则我们不接触名称范围.

返回值:

返回可以捕获和重用的范围.

可能引发的异常:

  • ValueError:在创建范围内尝试重用时,或在重用范围内创建时.
  • TypeError:某些参数的类型不合适时.

__enter__

__enter__()

__exit__

__exit__(
    type_arg,
    value_arg,
    traceback_arg
)
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy