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中的字典详细介绍
Sep 18 Python
python简单实现基数排序算法
May 16 Python
利用Python开发实现简单的记事本
Nov 15 Python
python实现用户答题功能
Jan 17 Python
浅析PHP与Python进行数据交互
May 15 Python
pandas 把数据写入txt文件每行固定写入一定数量的值方法
Dec 28 Python
python logging模块的使用总结
Jul 09 Python
Python OpenCV图像指定区域裁剪的实现
Oct 30 Python
浅谈Django中的QueryDict元素为数组的坑
Mar 31 Python
Python生成随机验证码代码实例解析
Jun 09 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
Sep 02 Python
python模块内置属性概念及实例
Feb 18 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
PHP迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
解析Ubuntu下crontab命令的用法
2013/06/24 PHP
PHP中使用memcache存储session的三种配置方法
2014/04/05 PHP
Yii2 assets清除缓存的方法
2016/05/16 PHP
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
php curl优化下载微信头像的方法总结
2018/09/07 PHP
用js怎么把&字符换成"&amp:"
2006/10/19 Javascript
ie下jquery.getJSON的缓存问题的处理方法
2013/03/29 Javascript
JS+CSS实现带小三角指引的滑动门效果
2015/09/22 Javascript
JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单)
2015/09/25 Javascript
javascript新闻跑马灯实例代码
2020/07/29 Javascript
值得分享的bootstrap table实例
2016/09/22 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
2017/03/09 Javascript
微信小程序中使用javascript 回调函数
2017/05/11 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
2017/09/19 Javascript
webpack将js打包后的map文件详解
2018/02/22 Javascript
解决vue-cli项目webpack打包后iconfont文件路径的问题
2018/09/01 Javascript
小程序实现多选框功能
2018/10/30 Javascript
微信小程序实现展示评分结果功能
2019/02/15 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
2019/08/26 Javascript
JS实现吸顶特效
2020/01/08 Javascript
如何利用javascript接收json信息并进行处理
2020/08/06 Javascript
编写简单的Python程序来判断文本的语种
2015/04/07 Python
Python+django实现简单的文件上传
2016/08/17 Python
Python实现简单石头剪刀布游戏
2021/01/20 Python
python3实现elasticsearch批量更新数据
2019/12/03 Python
Jupyter Notebook输出矢量图实例
2020/04/14 Python
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
Html5 页面适配iPhoneX(就是那么简单)
2019/09/05 HTML / CSS
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
HR喜欢的自荐信格式
2013/10/08 职场文书
毕业生实习鉴定
2013/12/11 职场文书
公司清洁工岗位职责
2013/12/14 职场文书
列车长先进事迹材料
2014/01/25 职场文书
老干部工作先进事迹
2014/08/17 职场文书