tf.name scope,with tf.variable_scope()作用

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: