tf.name scope,with tf.variable_scope()作用
本文主要介绍python神经网络中tf.name_scope和tf.variable_scope函数的区别。有需要的朋友可以参考一下,希望能有所帮助。祝你进步很大,早日升职加薪。
00-1010学习前言tf.variable_scope函数测试代码1,用reuse=True共享变量2,用AUTO_REUSE共享变量
目录
最近在学目标探测.SSD源码好复杂.看了很多版本的SSD源代码,发现都可以用tf.variable_scope。一开始我以为是tf.name_scope,才发现两者不一样。
学习前言
Tf.name_scope()和tf.variable_scope()是两个作用域,一般与创建/调用变量的函数tf.variable()和tf.get_variable()一起使用。
为什么要用两个不同的范围?主要原因和变量共享有关。
变量共享主要涉及两个函数:tf。变量()和tf.get_variable()
tf.get_variable()函数需要在tf.variable_scope的作用域下使用。这是因为tf.get_variable()有一个变量检查机制,它会检测现有变量是否被设置为共享变量。同名变量有共享机制时,不会报错,但如果没有设置为共享变量,就会报错。
如果tf。变量()时,每次都会创建一个新变量。但是很多时候,我们希望重用一些变量,所以我们使用get_variable(),它会搜索变量名。如果有,我们就直接用,不会新建。
当共享变量时,需要使用标记重用。当reuse=True时,可以共享;如果为False,则不能共享。
两者区别
tf .变量范围(
名称或范围,
默认名称=无,
值=无,
初始值设定项=无,
正则=无,
caching _ device=None,
partitioner=无,
custom _ getter=无,
重用=无,
dtype=无,
use_resource=None
约束=无,
辅助名称范围=真
)
其中包括:
1.name_or_scope:范围的名称。
2.default_name:如果name_or_scope参数为None,则使用默认名称,该名称是唯一的;如果提供了name_or_scope,则不会使用它,因此它不是必需的,可以是None。
3.值:传递给操作函数的张量参数列表。
4.初始值设定项:此范围内变量的默认初始值设定项。
5.正则化器:此范围内变量的默认正则化器。
6.caching_device:该范围内变量的默认缓存设备。
7.分区程序:这个范围内变量的默认分区程序。
8.custom_getter:该范围内变量的默认自定义getter。
9.重用:可以是True,None或者tf。AUTO _ REUSE;如果是真的,可以开始共享变量,用于变量重构;如果是tf。AUTO_REUSE,那么我们创建变量(如果不存在),否则我们返回变量(用于第一轮创建变量);如果没有,我们继承父作用域的重用标志。
10.dtype:在此范围内创建的变量类型。
tf.variable_scope函数
测试代码
将张量流作为tf导入
#初始化第一个v1
with TF . variable _ scope( scope 1 ):
v1=tf.get_variable(v1 ,[3,3],tf.float32,initializer=TF . constant _ initializer(1))
打印(v1.name)
#不同的范围
with TF . variable _ scope( scope 2 ):
v1=tf.get_variable(v1 ,[3,3],tf.float32,initializer=TF . constant _ initializer(1))
打印(v1.name)
#开始分享
with tf.variable_scope(scope1 ,reuse=True):
v1_share=tf.get_variable(v1 ,[3,3],tf.float32,initializer=TF . constant _ initializer(1))
打印(v1_share.name)
运行结果是:
范围1/v1:0
范围2/v1:0
范围1/v1:0
如果你在底部加上它
with TF . variable _ scope( scope 2 ):
v1_share=tf.get_variable(v1 ,[3,3],tf.float32,initializer=TF . constant _ initializer(1))
打印(v1_share.name)
此时没有复用,不能共享,程序报错。
1、使用reuse=True共享变量
将张量流作为tf导入
#使用AUTO_REUSE直接创建
#如果reuse=True,初始化第一轮创建时将报告错误。
def演示():
with tf.variable_scope(demo ,reuse=tf .自动重复使用):
v=tf.get_variable(v ,[1])
返回英语字母表中第二十二个字母
v1=演示()
v2=演示()
打印(v1.name)
运行结果为:
演示/v:0
演示/v:0
以上就是大蟒神经网络tf.name_scope和tf。变量_范围函数区别的详细内容,更多关于tf.name_scope和tf。变量_范围的资料请关注盛行信息技术软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。