TensorFLow 变量命名空间实例


Posted in Python onFebruary 11, 2020

一、name_scope

with tf.name_scope(name):

name_scope: 为了更好地管理变量的命名空间而提出的。比如在 tensorboard 中,因为引入了 name_scope, 我们的 Graph 看起来才井然有序。

name_scope 对 get_variable 创建变量的 name 没有影响,即 get_variable 创建的变量不在 name_scope 这个命名空间中

二、variable_scope

with tf.variable_scope(name_or_scope, reuse=None):

variable_scope: 大部分情况下,跟 tf.get_variable() 配合使用,实现变量共享的功能

可通过tf.get_variable_scope().reuse == True/False 判断参变量是否共享

当前变量作用域可以用tf.get_variable_scope()进行检索并且reuse 标签可以通过调用tf.get_variable_scope().reuse_variables()设置为True

三、共享参变量

1、方法

使用 tf.Variable() 创建同一个 name 的变量(操作名不同),均不会报错,但系统会自动修改 name(实质还是不让共享参变量)

使用 tf.get_varible() 创建同一个 name 的变量(操作名不同),均会报错(为了避免无意识的参变量复用造成的错误)

我们可以在 variable_scope 中使用 tf.get_variable() 创建变量,并通过 with tf.variable_scope(name_or_scope, reuse=True) 来共享参变量:

reuse=True:将只能获取命名空间中已经创建过的变量,如果变量不存在,则tf.get_variable函数将报错。

reuse=None / False:tf.get_variable操作将创建新的变量,如果同名的变量已经存在,则tf.get_variable函数将报错。

2、代码示例

# 下面是定义一个卷积层的通用方式
def conv_relu(input, kernel_shape, bias_shape):
  # Create variable named "weights".
  weights = tf.get_variable("weights", kernel_shape,
    initializer=tf.random_normal_initializer())
  # Create variable named "biases".
  biases = tf.get_variable("biases", bias_shape,
    initializer=tf.constant_intializer(0.0))
  conv = tf.nn.conv2d(input, weights,
    strides=[1, 1, 1, 1], padding='SAME')
  return tf.nn.relu(conv + biases)


# 定义一个图片过滤器
def my_image_filter(input_images):
  with tf.variable_scope("conv1"):
    # Variables created here will be named "conv1/weights", "conv1/biases".
    relu1 = conv_relu(input_images, [5, 5, 32, 32], [32])
  with tf.variable_scope("conv2"):
    # Variables created here will be named "conv2/weights", "conv2/biases".
    return conv_relu(relu1, [5, 5, 32, 32], [32])


# 实验一:调用 my_image_filter() 两次
result1 = my_image_filter(image1)
result2 = my_image_filter(image2)
>>> Raises ValueError(... conv1/weights already exists ...), tf.get_variable()会检测已经存在的变量是否已经共享


# 解决方法一, 可以在设计网络时加上一个布尔型的 reuse 参数 
with tf.variable_scope("image_filters"):
  result1 = my_image_filter(image1)
with tf.variable_scope("image_filters", reuse=True):
  result2 = my_image_filter(image2)


# 解决方法二
with tf.variable_scope("image_filters") as scope:
  # 下面我们两次调用 my_image_filter 函数,但是由于引入了变量共享机制
  # 可以看到我们只是创建了一遍网络结构。
  result1 = my_image_filter(image1)
  scope.reuse_variables()
  result2 = my_image_filter(image2)


# 解决方法三
with tf.variable_scope("image_filters") as scope:
  result1 = my_image_filter(image1)
with tf.variable_scope(scope, reuse=True):
  result2 = my_image_filter(image2)


# 打印出所有的可训练参变量
vs = tf.trainable_variables()
print('There are %d trainable_variables in the Graph: ' % len(vs))
for v in vs:
  print(v)


# 输出结果证明确实:参变量共享,因为只有四个变量,没有创建新的变量。
There are 4 trainable_variables in the Graph: 
Tensor("image_filters/conv1/weights/read:0", shape=(5, 5, 32, 32), dtype=float32)
Tensor("image_filters/conv1/biases/read:0", shape=(32,), dtype=float32)
Tensor("image_filters/conv2/weights/read:0", shape=(5, 5, 32, 32), dtype=float32)
Tensor("image_filters/conv2/biases/read:0", shape=(32,), dtype=float32)

四、取出所有可训练参数

# Returns all variables created with trainable=True in a var_list
var_list = tf.trainable_variables()

init = tf.global_variables_initializer()
sess.run(init)

for var in var_list:
  sess.run(var)

以上这篇TensorFLow 变量命名空间实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的sort()方法使用基础教程
Jan 08 Python
python list排序的两种方法及实例讲解
Mar 20 Python
django项目运行因中文而乱码报错的几种情况解决
Nov 07 Python
python实现12306抢票及自动邮件发送提醒付款功能
Mar 08 Python
python设置值及NaN值处理方法
Jul 03 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
Jun 24 Python
Python aiohttp百万并发极限测试实例分析
Oct 26 Python
Python:二维列表下标互换方式(矩阵转置)
Dec 02 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
Jun 30 Python
利用python制作拼图小游戏的全过程
Dec 04 Python
5道关于python基础 while循环练习题
Nov 27 Python
pandas时间序列之pd.to_datetime()的实现
Jun 16 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
Feb 11 #Python
Python中文分词库jieba,pkusegwg性能准确度比较
Feb 11 #Python
pytorch中图像的数据格式实例
Feb 11 #Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
Feb 11 #Python
python中文分词库jieba使用方法详解
Feb 11 #Python
Transpose 数组行列转置的限制方式
Feb 11 #Python
Tensorflow:转置函数 transpose的使用详解
Feb 11 #Python
You might like
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
详解PHP的抽象类和抽象方法以及接口总结
2019/03/15 PHP
ext实现完整的登录代码
2008/08/08 Javascript
jQuery右键菜单contextMenu使用实例
2011/09/28 Javascript
javascript如何动态加载表格与动态添加表格行
2013/11/27 Javascript
JavaScript中的变量定义与储存介绍
2014/12/31 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
jQuery实现的进度条效果
2015/07/15 Javascript
微信jssdk用法汇总
2016/07/16 Javascript
JavaScript九九乘法口诀表的简单实现
2016/10/04 Javascript
jQuery实现链接的title快速出现的方法
2017/02/20 Javascript
fullPage.js和CSS3实现全屏滚动效果
2017/05/05 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
详解如何创建并发布一个 vue 组件
2018/11/08 Javascript
vue父子组件的通信方法(实例详解)
2019/11/10 Javascript
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
python3使用urllib模块制作网络爬虫
2016/04/08 Python
Python爬虫包BeautifulSoup异常处理(二)
2018/06/17 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
python读取目录下最新的文件夹方法
2018/12/24 Python
Django实现跨域请求过程详解
2019/07/25 Python
python随机生成大小写字母数字混合密码(仅20行代码)
2020/02/01 Python
详解python环境安装selenium和手动下载安装selenium的方法
2020/03/17 Python
Python ATM功能实现代码实例
2020/03/19 Python
Python控制台实现交互式环境执行
2020/06/09 Python
CSS3,线性渐变(linear-gradient)的使用总结
2017/01/09 HTML / CSS
英国顶级足球鞋的领先零售商:Lovell Soccer
2019/08/27 全球购物
球队口号
2014/06/18 职场文书
会计工作总结范文2014
2014/12/23 职场文书
预防艾滋病宣传活动总结
2015/05/09 职场文书
民事上诉状范文
2015/05/22 职场文书
土木工程毕业答辩开场白
2015/05/29 职场文书
mysql死锁和分库分表问题详解
2021/04/16 MySQL
python三子棋游戏
2022/05/04 Python
volatile保证可见性及重排序方法
2022/08/05 Java/Android