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将图片文件转换成base64编码的方法
Mar 14 Python
利用python爬取斗鱼app中照片方法实例
Dec 03 Python
Python产生Gnuplot绘图数据的方法
Nov 09 Python
python爬虫简单的添加代理进行访问的实现代码
Apr 04 Python
python pyinstaller 加载ui路径方法
Jun 10 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
Jul 06 Python
python从list列表中选出一个数和其对应的坐标方法
Jul 20 Python
python3反转字符串的3种方法(小结)
Nov 07 Python
python实现logistic分类算法代码
Feb 28 Python
Python中使用ipython的详细教程
Jun 22 Python
Pandas 稀疏数据结构的实现
Jul 25 Python
python中validators库的使用方法详解
Sep 23 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 #Python
python开发制作好看的时钟效果
关于的python五子棋的算法
python开发人人对战的五子棋小游戏
python pygame 开发五子棋双人对弈
May 02 #Python
Python开发简易五子棋小游戏
May 02 #Python
Python开发五子棋小游戏
You might like
PHP 源代码压缩小工具
2009/12/22 PHP
PHP网站备份程序代码分享
2011/06/10 PHP
php获取数组中重复数据的两种方法
2013/06/28 PHP
PHP 实现的将图片转换为TXT
2015/10/21 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
JavaScript中实现块作用域的方法
2010/04/01 Javascript
js图片自动切换效果处理代码
2013/05/07 Javascript
原生js实现半透明遮罩层效果具体代码
2013/06/06 Javascript
jquery单行文字向上滚动效果示例
2014/03/06 Javascript
JavaScript调用ajax获取文本文件内容实现代码
2014/03/28 Javascript
jQuery中常用的遍历函数用法实例总结
2015/09/01 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
js实现对ajax请求面向对象的封装
2016/01/08 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
2016/10/10 Javascript
Angular在一个页面中使用两个ng-app的方法
2017/02/20 Javascript
vue表单绑定实现多选框和下拉列表的实例
2017/08/12 Javascript
AngularJS 事件发布机制
2018/08/28 Javascript
vue生命周期和react生命周期对比【推荐】
2018/09/19 Javascript
使用express获取微信小程序二维码小记
2019/05/21 Javascript
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
python利用hook技术破解https的实例代码
2013/03/25 Python
详解Python3 pandas.merge用法
2019/09/05 Python
使用matlab或python将txt文件转为excel表格
2019/11/01 Python
用opencv给图片换背景色的示例代码
2020/07/08 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
详解如何使用CSS3中的结构伪类选择器和伪元素选择器
2020/01/06 HTML / CSS
css3实现简单的白云飘动背景特效
2020/10/28 HTML / CSS
德国最大的设计师鞋网上商店:Budapester
2017/12/07 全球购物
微软新西兰官方网站:Microsoft New Zealand
2018/08/17 全球购物
经营理念口号
2014/06/21 职场文书
建筑安全生产目标责任书
2014/07/23 职场文书
2014年团工作总结
2014/11/27 职场文书
瞿秋白纪念馆观后感
2015/06/10 职场文书
学校教学管理制度
2015/08/06 职场文书
新年寄语2016
2015/08/17 职场文书