tf.name_scope和tf.variable_scope函数作用和用法是什么
Admin 2022-09-16 群英技术资讯 946 次浏览
这篇文章主要讲解了“tf.name_scope和tf.variable_scope函数作用和用法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“tf.name_scope和tf.variable_scope函数作用和用法是什么”吧!tf.name_scope()和tf.variable_scope()是两个作用域,一般与两个创建/调用变量的函数tf.variable() 和tf.get_variable()搭配使用。
为什么要使用两个不同的作用域方式呢?其主要原因与变量共享相关。
变量共享主要涉及两个函数:tf.Variable() 和tf.get_variable()
在tf.variable_scope的作用域下需要使用tf.get_variable()函数,这是因为tf.get_variable()拥有一个变量检查机制,会检测已经存在的变量是否设置为共享变量,当同名变量存在共享机制时,不会报错,如果并未设置为共享变量,则报错。
如果使用tf.Variable() 的话每次都会新建变量。但是很多时候我们希望重用一些变量,所以我们使用到了get_variable(),它会去搜索变量名,有就直接用,没有再新建。
在进行变量共享的时候需要使用到标志reuse,当reuse = True时是可以共享,False时不可以共享。
tf.variable_scope(
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
)
其中:
1、name_or_scope:范围的名称。
2、default_name:如果name_or_scope参数为None,则使用默认的名称,该名称将是唯一的;如果提供了name_or_scope,它将不会被使用,因此它不是必需的,并且可以是None。
3、values:传递给操作函数的Tensor参数列表。
4、initializer:此范围内变量的默认初始值设定项。
5、regularizer:此范围内变量的默认正规化器。
6、caching_device:此范围内变量的默认缓存设备。
7、partitioner:此范围内变量的默认分区程序。
8、custom_getter:此范围内的变量的默认自定义吸气。
9、reuse:可以是True、None或tf.AUTO_REUSE;如果是True,即可以开始共享变量,变量重构用;如果是tf.AUTO_REUSE,则我们创建变量(如果它们不存在),否则返回它们(用于在第一轮创建变量);如果是None,则我们继承父范围的重用标志。
10、dtype:在此范围中创建的变量类型。
import tensorflow as tf
# 初始化第一个v1
with tf.variable_scope("scope1"):
v1 = tf.get_variable("v1",[3,3],tf.float32,initializer=tf.constant_initializer(1))
print(v1.name)
# 不同的作用域
with tf.variable_scope("scope2"):
v1 = tf.get_variable("v1",[3,3],tf.float32,initializer=tf.constant_initializer(1))
print(v1.name)
# 开始共享
with tf.variable_scope("scope1",reuse = True):
v1_share = tf.get_variable("v1",[3,3],tf.float32,initializer=tf.constant_initializer(1))
print(v1_share.name)
运行结果为:
scope1/v1:0
scope2/v1:0
scope1/v1:0
如果在下部再加上
with tf.variable_scope("scope2"):
v1_share = tf.get_variable("v1",[3,3],tf.float32,initializer=tf.constant_initializer(1))
print(v1_share.name)
此时没有reuse,不能共享,程序报错。
import tensorflow as tf
# 使用AUTO_REUSE可以直接创建
# 如果reuse = True,初始化第一轮创建的时候会报错
def demo():
with tf.variable_scope("demo", reuse=tf.AUTO_REUSE):
v = tf.get_variable("v", [1])
return v
v1 = demo()
v2 = demo()
print(v1.name)
运行结果为:
demo/v:0
demo/v:0
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
list.sort()方法是Python的列表方法,用于对原列表进行排序。本文详细的介绍了list.sort的具体使用,具有一定的参考价值,感兴趣的可以了解一下
contour和contourf都是画三维等高线图的,下面这篇文章主要给大家介绍了关于python作图基础操作之plt.contour的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
使用pyplot的 bar)函数可以快速绘制柱形图或堆积柱形图。bar)函数的语法格式如下所示
python怎么实现合并列表?有些新手对于python合并列表不是很清楚,对此小编整理了一些python合并列表的方法,具有一定的借鉴价值,需要的朋友可以参考学习,下面我们就一起来看看吧。
这篇文章主要为大家介绍了python神经网络Keras实现LSTM及其参数量详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008