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制作简单的朴素基数估计器的教程
Apr 01 Python
Pycharm编辑器技巧之自动导入模块详解
Jul 18 Python
python获取网页中所有图片并筛选指定分辨率的方法
Mar 31 Python
python线程池threadpool使用篇
Apr 27 Python
pygame游戏之旅 添加碰撞效果的方法
Nov 20 Python
详解python selenium 爬取网易云音乐歌单名
Mar 28 Python
pyqt5与matplotlib的完美结合实例
Jun 21 Python
python打开文件的方式有哪些
Jun 29 Python
Python如何输出百分比
Jul 31 Python
基于OpenCV的网络实时视频流传输的实现
Nov 15 Python
python中用Scrapy实现定时爬虫的实例讲解
Jan 18 Python
python中subplot大小的设置步骤
Jun 28 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 #Python
python开发制作好看的时钟效果
关于的python五子棋的算法
python开发人人对战的五子棋小游戏
python pygame 开发五子棋双人对弈
May 02 #Python
Python开发简易五子棋小游戏
May 02 #Python
Python开发五子棋小游戏
You might like
解析php5配置使用pdo
2013/07/03 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
2016/10/10 PHP
利用PHP获取汉字首字母并且分组排序详解
2017/10/22 PHP
php代码调试利器firephp安装与使用方法分析
2018/08/21 PHP
javascript Array.prototype.slice使用说明
2010/10/11 Javascript
如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙
2011/03/03 Javascript
基于jquery的拖动布局插件
2011/11/25 Javascript
用JavaScript计算在UTF-8下存储字符串占用字节数
2013/08/08 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
2014/05/28 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
Javascript通过overflow控制列表闭合与展开的方法
2015/05/15 Javascript
jQuery基本过滤选择器用法示例
2016/09/09 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
jquery实现tab选项卡切换效果(悬停、下方横线动画位移)
2017/05/05 jQuery
学习LayUI时自研的表单参数校验框架案例分析
2019/07/29 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
2020/07/28 Javascript
vue中如何自定义右键菜单详解
2020/12/08 Vue.js
Python使用xlrd模块操作Excel数据导入的方法
2015/05/26 Python
python分析作业提交情况
2017/11/22 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
2019/07/23 Python
Django单元测试工具test client使用详解
2019/08/02 Python
amazeui树节点自动展开折叠面板并选中第一个树节点的实现
2020/08/24 HTML / CSS
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
DELPHI面试题研发笔试试卷
2015/11/08 面试题
高级销售员求职信
2013/10/25 职场文书
标准导师推荐信(医学类)
2013/10/28 职场文书
会计岗位描述
2014/02/22 职场文书
院领导写的就业推荐信
2014/03/09 职场文书
小学毕业典礼主持词
2014/03/27 职场文书
小学五年级学生评语
2014/04/22 职场文书
2014银行领导班子群众路线对照检查材料思想汇报
2014/09/17 职场文书
终止劳动合同证明书样本
2014/11/19 职场文书
陕西导游词
2015/02/04 职场文书
JS Object构造函数之Object.freeze
2021/04/28 Javascript
springboot项目以jar包运行的操作方法
2021/06/30 Java/Android
关于使用Redisson订阅数问题
2022/01/18 Redis