Tensorflow学习笔记(4)---共享变量:tf.variable_scope() & tf.get_variable() &变量作用域机制

这篇博客详细介绍了TensorFlow中的变量作用域机制和共享变量的实现,通过`tf.variable_scope()`和`tf.get_variable()`函数进行阐述。内容包括变量作用域的创建、变量全称的构成、初始化器的继承以及变量的重用规则。此外,还提到了变量创建的其他函数,如`tf.Variable()`和命名空间的创建函数。
摘要由CSDN通过智能技术生成

问题来源:
例如卷积神经网络,循环神经网络有大量的变量需要共享,而且在同一地方初始化所有变量,因此就产生共享变量和变量作用域机制的概念。

1. tf.variable_scope()的理解 & 变量作用域机制

1.1. tf.variable_scope()
tf.variable_scope(name, initializer, reuse)
	name:变量作用域的名称
	initializer:可选,在该变量作用域内默认的初始化器
	reuse:布尔值,默认为False,是否可重用变量

或者使用object.reuse_variable()来共享变量。object对象为变量作用域。

1.2. 变量作用域机制
  • 使用with tf.variable_scope()...:来创建一个变量作用域。
  • 在变量作用域内,创建的变量的名称的前缀是变量作用域的名称。即变量作用域内的变量的全称:变量作用域名称+’/’+变量的名称。例如,变量作用域的名称为foo, 变量的名称为v,则该变量的全称为:foo/v:0。
# 创建变量作用域,其名称为foo
with tf.variable_scope("foo"):
	# 在该变量作用域内创建变量v,名称为v
    v = tf.get_variable("v", [1], dtype="float")
    print(v.name)

输出结果:
在这里插入图片描述

  • 在变量作用域内,若变量作用域定义了一个初始化器,则在作用域内创建的变量的初始化器若无指定,则默认为变量作用域定义的初始化器。
# 创建变量作用域,域名为foo_1, 初始化器为常数初始化器
with tf.variable_scope("foo_1",initializer=tf.constant_initializer(0.5)):
	# 创建变量v1,无指定初始化器,则该变量使用默认的初始化器,初始化结果为0.5
    v1 = tf.get_variable("v1", [1], dtype="float")
    # 创建变量w1,指定了初始化器,则该变量初始化结果为0.4
    w1 = tf.get_variable("w1", [1], dtype="float", initializer=tf.constant_initializer(0.4))  
  • 变量作用域下ops的全称:变量作用域的名称+’/’+op的名称。若有名称作用域添加到变量作用域中,则只会影响ops的全称,不会影响变量的全称。
# 创建变量作用域,域名为foo_2
with tf.variable_scope("foo_2"):
    # 创建变量v2
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值