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中数据解析
May 05 Python
Ubuntu下创建虚拟独立的Python环境全过程
Feb 10 Python
Php多进程实现代码
May 07 Python
python机器学习之KNN分类算法
Aug 29 Python
python使用__slots__让你的代码更加节省内存
Sep 05 Python
Django中多种重定向方法使用详解
Jul 17 Python
python实现超市管理系统(后台管理)
Oct 25 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
Apr 26 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
Jun 04 Python
python mysql中in参数化说明
Jun 05 Python
python将YUV420P文件转PNG图片格式的两种方法
Jan 22 Python
python基础之文件处理知识总结
May 23 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 #Python
python开发制作好看的时钟效果
关于的python五子棋的算法
python开发人人对战的五子棋小游戏
python pygame 开发五子棋双人对弈
May 02 #Python
Python开发简易五子棋小游戏
May 02 #Python
Python开发五子棋小游戏
You might like
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
PHP获取php,mysql,apche的版本信息示例代码
2014/01/16 PHP
php生成验证码函数
2015/10/20 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
PHP实现电商订单自动确认收货redis队列
2017/05/17 PHP
Javascript结合css实现网页换肤功能
2009/11/02 Javascript
调试Javascript代码(浏览器F12及VS中debugger关键字)
2013/01/25 Javascript
js 操作符汇总
2014/11/08 Javascript
jQuery消息提示框插件Tipso
2015/05/04 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
2015/08/18 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
2015/10/12 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
2016/09/06 Javascript
详解Node中导入模块require和import的区别
2017/08/11 Javascript
微信小程序画布圆形进度条显示效果
2020/11/17 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
2019/05/14 Javascript
Vue父组件如何获取子组件中的变量
2019/07/24 Javascript
微信小程序 多行文本显示...+显示更多按钮和收起更多按钮功能
2019/09/26 Javascript
跟老齐学Python之折腾一下目录
2014/10/24 Python
解决Python中由于logging模块误用导致的内存泄露
2015/04/23 Python
12个步骤教你理解Python装饰器
2019/07/01 Python
python2与python3爬虫中get与post对比解析
2019/09/18 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
浅谈pytorch torch.backends.cudnn设置作用
2020/02/20 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
Html5之webcoekt播放JPEG图片流
2020/09/22 HTML / CSS
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
介绍一下XMLHttpRequest对象
2012/02/12 面试题
会计岗位职责
2013/11/08 职场文书
城市精细化管理实施方案
2014/03/04 职场文书
班级出游活动计划书
2014/08/15 职场文书
党员干部批评与自我批评反四风思想汇报
2014/09/21 职场文书
聚会通知怎么写
2015/04/23 职场文书
单位综合评价意见
2015/06/05 职场文书
《灰雀》教学反思
2016/02/19 职场文书