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 序列化 pickle/cPickle模块使用介绍
Nov 30 Python
Python多线程编程简单介绍
Apr 13 Python
Python3 中把txt数据文件读入到矩阵中的方法
Apr 27 Python
flask入门之表单的实现
Jul 18 Python
在PyCharm中批量查找及替换的方法
Jan 20 Python
pandas dataframe添加表格框线输出的方法
Feb 08 Python
python浪漫表白源码
Apr 05 Python
Python OpenCV调用摄像头检测人脸并截图
Aug 20 Python
Django中提供的6种缓存方式详解
Aug 05 Python
python-numpy-指数分布实例详解
Dec 07 Python
如何使用python3获取当前路径及os.path.dirname的使用
Dec 13 Python
python基于opencv批量生成验证码的示例
Apr 28 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 #Python
python开发制作好看的时钟效果
关于的python五子棋的算法
python开发人人对战的五子棋小游戏
python pygame 开发五子棋双人对弈
May 02 #Python
Python开发简易五子棋小游戏
May 02 #Python
Python开发五子棋小游戏
You might like
php checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
2016/03/21 PHP
php ajax confirm 删除实例详解
2019/03/06 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
juqery 学习之六 CSS--css、位置、宽高
2011/02/11 Javascript
火狐下table中创建form导致两个table之间出现空白
2013/09/02 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
js(JavaScript)实现TAB标签切换效果的简单实例
2014/02/26 Javascript
jQuery Ajax中的事件详细介绍
2015/04/16 Javascript
nodejs简单实现中英文翻译
2015/05/04 NodeJs
jQuery使用contains过滤器实现精确匹配方法详解
2016/02/25 Javascript
js遍历json对象所有key及根据动态key获取值的方法(必看)
2017/03/09 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
vue表单验证你真的会了吗?vue表单验证(form)validate
2019/04/07 Javascript
前端js中的事件循环eventloop机制详解
2019/05/15 Javascript
JS中FormData类实现文件上传
2020/03/27 Javascript
Python 专题二 条件语句和循环语句的基础知识
2017/03/19 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
2018/03/05 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
2018/11/15 Python
Python 二叉树的层序建立与三种遍历实现详解
2019/07/29 Python
Python如何使用paramiko模块连接linux
2020/03/18 Python
Django返回HTML文件的实现方法
2020/09/17 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
localstorage和sessionstorage使用记录(推荐)
2017/05/23 HTML / CSS
跨域修改iframe页面内容详解
2019/10/31 HTML / CSS
美丽的现代设计家具:2Modern
2018/07/26 全球购物
岳父生日宴会答谢词
2014/01/13 职场文书
小学教学随笔感言
2014/02/26 职场文书
个人授权委托书范文
2014/09/21 职场文书
党员民主评议自我评价
2014/10/20 职场文书
群众路线学习心得体会范文
2014/11/05 职场文书
给校长的建议书作文300字
2015/09/14 职场文书
SQL Server中锁的用法
2022/05/20 SQL Server
MyBatis核心源码深度剖析SQL语句执行过程
2022/05/20 Java/Android