详解tf.variable

您所在的位置:网站首页 翻译19 详解tf.variable

详解tf.variable

#详解tf.variable| 来源: 网络整理| 查看: 265

原创 https://blog.csdn.net/qq_41058594/article/details/85165025

在学习Tensorflow进阶实例这本书时候出现了tf.variable_scope,当时很蒙圈,现在就来总结一下:

tf.variable_scope函数 variable_scope类 用于定义创建变量(层)的操作的上下文管理器。 此上下文管理器验证(可选)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 )

想要查找Tensorflow中的其他函数请参考:

 


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3