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调用浏览器并打开一个网址的例子
Jun 05 Python
python 编程之twisted详解及简单实例
Jan 28 Python
Python字符串拼接的几种方法整理
Aug 02 Python
学习Python selenium自动化网页抓取器
Jan 20 Python
python判断一个集合是否为另一个集合的子集方法
May 04 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
May 29 Python
解决pycharm无法识别本地site-packages的问题
Oct 13 Python
Python数据报表之Excel操作模块用法分析
Mar 11 Python
Django Sitemap 站点地图的实现方法
Apr 29 Python
Python数据类型之Number数字操作实例详解
May 08 Python
利用Python进行图像的加法,图像混合(附代码)
Jul 14 Python
对python中 math模块下 atan 和 atan2的区别详解
Jan 17 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 #Python
python开发制作好看的时钟效果
关于的python五子棋的算法
python开发人人对战的五子棋小游戏
python pygame 开发五子棋双人对弈
May 02 #Python
Python开发简易五子棋小游戏
May 02 #Python
Python开发五子棋小游戏
You might like
一贴学会PHP 新手入门教程
2009/08/03 PHP
PHP安全防范技巧分享
2011/11/03 PHP
fgetcvs在linux的问题
2012/01/15 PHP
php打造属于自己的MVC框架
2012/03/07 PHP
php获取从html表单传递数组的方法
2015/03/20 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
2015/11/05 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
js 触发select onchange事件代码
2014/03/20 Javascript
浅谈JavaScript中的String对象常用方法
2015/02/25 Javascript
html5+canvas实现支持触屏的签名插件教程
2017/05/08 Javascript
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
简单的三步vuex入门
2018/05/20 Javascript
vue使用v-for实现hover点击效果
2018/09/29 Javascript
微信小程序实现文字跑马灯
2020/05/26 Javascript
Koa从零搭建到Api实现项目的搭建方法
2019/07/30 Javascript
[44:26]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第二局
2016/03/03 DOTA
[01:21]DOTA2 新英雄 森海飞霞
2020/12/18 DOTA
在Python中使用模块的教程
2015/04/27 Python
Python图像灰度变换及图像数组操作
2016/01/27 Python
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
python中关于for循环的碎碎念
2017/06/30 Python
Python matplotlib画图实例之绘制拥有彩条的图表
2017/12/28 Python
python中返回矩阵的行列方法
2018/04/04 Python
python使用matplotlib绘制热图
2018/11/07 Python
Python使用psutil获取进程信息的例子
2019/12/17 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
2020/04/25 Python
python实现126邮箱发送邮件
2020/05/20 Python
Python接口测试文件上传实例解析
2020/05/22 Python
链表面试题-一个链表的结点结构
2015/05/04 面试题
自我鉴定注意事项
2014/01/19 职场文书
护士见习期自我鉴定
2014/02/08 职场文书
学校爱心捐款倡议书
2014/05/13 职场文书
售后客服工作职责
2014/06/16 职场文书
2014教师专业技术工作总结
2014/12/03 职场文书
导游词之秦始皇兵马俑博物馆
2019/09/29 职场文书
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript