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多线程http下载实现示例
Dec 30 Python
Python多线程编程(三):threading.Thread类的重要函数和方法
Apr 05 Python
Python字符编码判断方法分析
Jul 01 Python
Python实现GUI学生信息管理系统
Apr 05 Python
根据DataFrame某一列的值来选择具体的某一行方法
Jul 03 Python
Python3实现的旋转矩阵图像算法示例
Apr 03 Python
使用python实现简单五子棋游戏
Jun 18 Python
python opencv 批量改变图片的尺寸大小的方法
Jun 28 Python
Python numpy.zero() 初始化矩阵实例
Nov 27 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
Nov 10 Python
详解Python openpyxl库的基本应用
Feb 26 Python
Python OpenCV快速入门教程
Apr 17 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 #Python
python开发制作好看的时钟效果
关于的python五子棋的算法
python开发人人对战的五子棋小游戏
python pygame 开发五子棋双人对弈
May 02 #Python
Python开发简易五子棋小游戏
May 02 #Python
Python开发五子棋小游戏
You might like
写一个用户在线显示的程序
2006/10/09 PHP
PHP乱码问题,UTF-8乱码常见问题小结
2012/04/09 PHP
php中PDO方式实现数据库的增删改查
2015/05/17 PHP
PHP的Yii框架的基本使用示例
2015/08/21 PHP
yii分页组件用法实例分析
2015/12/28 PHP
php版微信小店API二次开发及使用示例
2016/11/12 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
2018/08/17 PHP
PHP iconv()函数字符编码转换的问题讲解
2019/03/22 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
在网页中控制wmplayer播放器
2006/07/01 Javascript
在图片上显示左右箭头类似翻页的代码
2013/03/04 Javascript
JavaScript实现定时隐藏与显示图片的方法
2015/08/06 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
jquery实现数字输入框
2017/02/22 Javascript
微信小程序实现tab切换效果
2017/11/21 Javascript
vue.js 实现评价五角星组件的实例代码
2018/08/13 Javascript
vue中created和mounted的区别浅析
2019/08/13 Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
2019/08/23 Javascript
使用layui前端框架弹出form表单以及提交的示例
2019/10/25 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
javascript中的offsetWidth、clientWidth、innerWidth及相关属性方法
2020/05/14 Javascript
js实现滑动滑块验证登录
2020/07/24 Javascript
python通过字典dict判断指定键值是否存在的方法
2015/03/21 Python
老生常谈python函数参数的区别(必看篇)
2017/05/29 Python
python的re正则表达式实例代码
2018/01/24 Python
python实现图片批量压缩程序
2018/07/23 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
2019/12/11 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
2021/03/02 Python
美国皮靴公司自1863年:The Frye Company
2016/11/30 全球购物
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
美国运动鞋和服装网上商店:YCMC
2018/09/15 全球购物
英国最大的在线床超市:Bed Star
2019/01/24 全球购物
优秀毕业自我鉴定
2014/02/15 职场文书
协议书范本
2014/04/23 职场文书
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技
Golang 实现WebSockets
2022/04/24 Golang