arg_scope 解读

本文详细解析了TensorFlow中的变量作用域(variable_scope)和arg_scope的使用。变量作用域主要通过tf.get_variable和tf.variable_scope管理变量的创建与重用,避免变量名冲突,并允许设置默认初始化器。arg_scope则用于设置一系列操作的默认参数,简化代码重复,例如padding、initializer等。在arg_scope中,第一次调用操作会使用默认参数,后续调用可以覆盖这些默认参数。
摘要由CSDN通过智能技术生成

共享变量

http://wiki.jikexueyuan.com/project/tensorflow-zh/how_tos/variable_scope.html

变量作用域

变量作用域机制在TensorFlow中主要由两部分组成:

  • tf.get_variable(name, shape, initializer): 通过所给的名字创建或是返回一个变量.
  • tf.variable_scope(scope_name): 通过 tf.get_variable()为变量名指定命名空间.

方法 tf.get_variable() 用来获取或创建一个变量,而不是直接调用tf.Variable.它采用的不是像`tf.Variable这样直接获取值来初始化的方法.一个初始化就是一个方法,创建其形状并且为这个形状提供一个张量.

所以,通过tf.get_variable()就可以避免重复创建变量。

理解tf.get_variable()

通常我们这样调用tf.variable()

v = tf.get_variable(name, scope, dtype, initializer)

此调用做了有关作用域的两件事中的其中之一,方法调入.总的有两种情况.

  • 情况1:当tf.get_variable_scope().reuse == False时,作用域就是为创建新变量所设置的。

这种情况下,v将通过tf.Variable所提供的形状和数据类型来重新创建.创建变量的全称将会由当前变量作用域名+所提供的名字所组成,并且还会检查来确保没有任何变量使用这个全称.如果这个全称已经有一个变量使用了,那么方法将会抛出ValueError错误.如果一个变量被创建,他将会用initializer(shape)进行初始化.比如:

  • 情况2:当tf.get_variable_scope().reuse == True时,作用域是为重用变量所设置。
    这种情况下,调用就会搜索一个已经存在的变量,他的全称和当前变量的作用域名+所提供的名字是否相等.如果不存在相应的变量,就会抛出ValueError 错误.如果变量找到了,就返回这个变量.如下:
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

tf.variable_scope()

变量作用域的主方法带有一个名称,它将会作为前缀用于变量名,并且带有一个重用标签来区分以上的两种情况.嵌套的作用域附加名字所用的规则和文件目录的规则很类似:

with tf.variable_scope("foo"):
    with tf.variable_scope("bar"):
        v = tf.get_variable("v", [1])
assert
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值