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中的is和id用法分析
Jan 26 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
May 26 Python
Python实现以时间换空间的缓存替换算法
Feb 19 Python
深入理解python中的atexit模块
Mar 07 Python
python实现简易云音乐播放器
Jan 04 Python
python3学习笔记之多进程分布式小例子
Feb 13 Python
Django压缩静态文件的实现方法详析
Aug 26 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
Feb 22 Python
python sorted函数原理解析及练习
Feb 10 Python
pycharm快捷键汇总
Feb 14 Python
使用python+poco+夜神模拟器进行自动化测试实例
Apr 23 Python
python 爬取豆瓣网页的示例
Apr 13 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 #Python
python开发制作好看的时钟效果
关于的python五子棋的算法
python开发人人对战的五子棋小游戏
python pygame 开发五子棋双人对弈
May 02 #Python
Python开发简易五子棋小游戏
May 02 #Python
Python开发五子棋小游戏
You might like
论建造顺序的重要性
2020/03/04 星际争霸
数据库相关问题
2006/10/09 PHP
浅析PHP页面局部刷新功能的实现小结
2013/06/21 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
2017/06/11 PHP
PHP使用redis消息队列发布微博的方法示例
2017/06/22 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
2018/05/12 PHP
JavaScript对象链式操作代码(jquery)
2010/07/04 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
深入理解JS DOM事件机制
2016/08/06 Javascript
用iframe实现不刷新整个页面上传图片的实例
2016/11/18 Javascript
微信小程序 首页制作简单实例
2017/04/07 Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
2017/09/14 Javascript
小程序开发基础之view视图容器
2018/08/21 Javascript
在Vue 中使用Typescript的示例代码
2018/09/10 Javascript
[01:25:09]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第二场
2014/05/24 DOTA
python实现simhash算法实例
2014/04/25 Python
在Python中使用PIL模块对图片进行高斯模糊处理的教程
2015/05/05 Python
Python实现的圆形绘制(画圆)示例
2018/01/31 Python
linux下python使用sendmail发送邮件
2018/05/22 Python
python 找出list中最大或者最小几个数的索引方法
2018/10/30 Python
django 邮件发送模块smtp使用详解
2019/07/22 Python
使用selenium和pyquery爬取京东商品列表过程解析
2019/08/15 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
pytorch数据预处理错误的解决
2020/02/20 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
Python流程控制语句的深入讲解
2020/06/15 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
python-地图可视化组件folium的操作
2020/12/14 Python
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
中国双语服务优势的在线购票及活动平台:247tickets
2018/10/26 全球购物
成人继续教育实施方案
2014/03/01 职场文书
外贸采购员岗位职责
2014/03/08 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
python控制台打印log输出重复的解决方法
2021/05/14 Python
Python编程源码报错解决方法总结经验分享
2021/10/05 Python
在SQL Server中使用 Try Catch 处理异常的示例详解
2022/07/15 SQL Server