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基础教程之udp端口扫描
Feb 10 Python
python实现类似ftp传输文件的网络程序示例
Apr 08 Python
如何搜索查找并解决Django相关的问题
Jun 30 Python
跟老齐学Python之关于循环的小伎俩
Oct 02 Python
Python 使用os.remove删除文件夹时报错的解决方法
Jan 13 Python
对python中数组的del,remove,pop区别详解
Nov 07 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
Dec 31 Python
python创造虚拟环境方法总结
Mar 04 Python
python中seaborn包常用图形使用详解
Nov 25 Python
解决jupyter notebook import error但是命令提示符import正常的问题
Apr 15 Python
Python 整行读取文本方法并去掉readlines换行\n操作
Sep 03 Python
openstack中的rpc远程调用的方法
Jul 09 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 #Python
python开发制作好看的时钟效果
关于的python五子棋的算法
python开发人人对战的五子棋小游戏
python pygame 开发五子棋双人对弈
May 02 #Python
Python开发简易五子棋小游戏
May 02 #Python
Python开发五子棋小游戏
You might like
PHP 组件化编程技巧
2009/06/06 PHP
一步一步学习PHP(2)――PHP类型
2010/02/15 PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
PHP连接SQLSERVER 注意事项(附dll文件下载)
2012/06/28 PHP
thinkphp常见路径用法分析
2014/12/02 PHP
PHP实现的DES加密解密类定义与用法示例
2020/11/02 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
2020/10/20 PHP
Prototype使用指南之range.js
2007/01/10 Javascript
js parsefloat parseint 转换函数
2010/01/21 Javascript
Extjs中使用extend(js继承) 的代码
2012/03/15 Javascript
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
jquery 追加tr和删除tr示例代码
2013/09/12 Javascript
jquery批量设置属性readonly和disabled的方法
2014/01/24 Javascript
了不起的node.js读书笔记之例程分析
2014/12/22 Javascript
JavaScript数组合并的多种方法
2016/05/22 Javascript
微信小程序 教程之事件
2016/10/18 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
微信小程序实现页面跳转传值的方法
2017/10/12 Javascript
微信小程序动态添加view组件的实例代码
2019/05/23 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
2019/12/13 Javascript
vue从后台渲染文章列表以及根据id跳转文章详情详解
2020/12/14 Vue.js
在Django的视图(View)外使用Session的方法
2015/07/23 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
2018/02/01 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
2018/03/13 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
Django数据模型中on_delete使用详解
2020/11/30 Python
HTML5里autofocus自动聚焦属性使用介绍
2016/06/22 HTML / CSS
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
简述网络文件系统NFS,并说明其作用
2016/10/19 面试题
小学生新学期寄语
2014/01/19 职场文书
会计电算化大学生职业规划书
2014/02/05 职场文书
党员承诺书范文
2014/05/19 职场文书
八荣八耻的活动方案
2014/08/16 职场文书
政府领导干部个人对照检查材料思想汇报
2014/09/24 职场文书
SQL Server删除表中的重复数据
2022/05/25 SQL Server