python神经网络 tf.name_scope 和 tf.variable_scope 的区别


Posted in Python onMay 04, 2022

学习前言

最近在学目标检测……SSD的源码好复杂……看了很多版本的SSD源码,发现他们会使用tf.variable_scope,刚开始我还以为就是tf.name_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函数

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:在此范围中创建的变量类型。

测试代码

1、使用reuse=True共享变量

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,不能共享,程序报错。

2、使用AUTO_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

以上就是python神经网络 tf.name_scope 和 tf.variable_scope 的区别的详细内容!


Tags in this post...

Python 相关文章推荐
python实现360的字符显示界面
Feb 21 Python
Python3.x中自定义比较函数
Apr 24 Python
python+splinter自动刷新抢票功能
Sep 25 Python
Python 获取div标签中的文字实例
Dec 20 Python
python变量赋值方法(可变与不可变)
Jan 12 Python
利用python实现汉字转拼音的2种方法
Aug 12 Python
Python字符串格式化输出代码实例
Nov 22 Python
如何基于Python创建目录文件夹
Dec 31 Python
python中plt.imshow与cv2.imshow显示颜色问题
Jul 16 Python
python中实现栈的三种方法
Dec 19 Python
Python 爬取淘宝商品信息栏目的实现
Feb 06 Python
Python实现抖音热搜定时爬取功能
Mar 16 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 #Python
python开发制作好看的时钟效果
关于的python五子棋的算法
python开发人人对战的五子棋小游戏
python pygame 开发五子棋双人对弈
May 02 #Python
Python开发简易五子棋小游戏
May 02 #Python
Python开发五子棋小游戏
You might like
Yii操作数据库的3种方法
2014/03/11 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
json 定义
2008/06/10 Javascript
Javascript 中介者模式实例
2009/12/16 Javascript
imgAreaSelect 中文文档帮助说明
2011/10/08 Javascript
Chosen 基于jquery的选择框插件使用方法
2012/05/30 Javascript
基于Jquery实现的一个图片滚动切换
2012/06/21 Javascript
Jquery Ajax解析XML数据(同步及异步调用)简单实例
2014/02/12 Javascript
Node.js模块加载详解
2014/08/16 Javascript
jQuery中val()方法用法实例
2014/12/25 Javascript
KnockoutJS 3.X API 第四章之click绑定
2016/10/10 Javascript
Webpack执行命令参数详解
2017/06/17 Javascript
js实现数组和对象的深浅拷贝
2017/09/30 Javascript
JS实现遍历不规则多维数组的方法
2018/03/21 Javascript
微信小程序实现的动态设置导航栏标题功能示例
2019/01/31 Javascript
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
2019/12/12 Javascript
微信小程序webSocket的使用方法
2020/02/20 Javascript
python迭代器实例简析
2014/09/25 Python
python 队列详解及实例代码
2016/10/18 Python
Python进阶之递归函数的用法及其示例
2018/01/31 Python
Python 反转字符串(reverse)的方法小结
2018/02/20 Python
selenium+python 对输入框的输入处理方法
2018/10/11 Python
Python Numpy 实现交换两行和两列的方法
2019/06/26 Python
Python模块_PyLibTiff读取tif文件的实例
2020/01/13 Python
浅谈Selenium+Webdriver 常用的元素定位方式
2021/01/13 Python
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
2010/04/01 HTML / CSS
CSS3中的transform属性进行2D和3D变换的基本用法
2016/05/12 HTML / CSS
canvas绘制文本内容自动换行的实现代码
2019/01/14 HTML / CSS
GAP阿联酋官网:GAP UAE
2017/11/30 全球购物
国际商务系学生个人的自我评价
2013/11/26 职场文书
我的画教学反思
2014/04/28 职场文书
2015年度销售个人工作总结
2015/03/31 职场文书
导游词之鲁迅祖居
2019/10/17 职场文书
详解Laravel框架的依赖注入功能
2021/05/27 PHP
python操作xlsx格式文件并读取
2021/06/02 Python