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采集博客中上传的QQ截图文件
Jul 18 Python
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
Nov 18 Python
Django使用Celery异步任务队列的使用
Mar 13 Python
详解Python进阶之切片的误区与高级用法
Dec 24 Python
Python代码太长换行的实现
Jul 05 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
Mar 13 Python
python实现密度聚类(模板代码+sklearn代码)
Apr 27 Python
在python下实现word2vec词向量训练与加载实例
Jun 09 Python
简述python Scrapy框架
Aug 17 Python
python连接mongodb数据库操作数据示例
Nov 30 Python
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
Jun 22 Python
Python集合set()使用的方法详解
Mar 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
ThinkPHP添加更新标签的方法
2014/12/05 PHP
php类中的$this,static,final,const,self这几个关键字使用方法
2015/12/14 PHP
PHP无限极分类函数的实现方法详解
2017/04/15 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
2019/07/24 PHP
服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
2007/03/06 Javascript
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
中文字符串截取的js函数代码
2013/04/17 Javascript
jQuery动态添加删除select项(实现代码)
2013/09/03 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
JavaScript模块随意拖动示例代码
2014/05/27 Javascript
Nodejs学习笔记之Global Objects全局对象
2015/01/13 NodeJs
jquery.form.js实现将form提交转为ajax方式提交的方法
2015/04/07 Javascript
JavaScript学习笔记之创建对象
2016/03/25 Javascript
BootStrap下jQuery自动完成的样式调整
2016/05/30 Javascript
理解JavaScript原型链
2016/10/25 Javascript
使用vue.js实现联动效果的示例代码
2017/01/10 Javascript
webpack 2.x配置reactjs基本开发环境详解
2017/08/08 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
介绍Python的Django框架中的QuerySets
2015/04/20 Python
在Python中测试访问同一数据的竞争条件的方法
2015/04/23 Python
Python全局变量用法实例分析
2016/07/19 Python
python验证码识别的示例代码
2017/09/21 Python
浅析python打包工具distutils、setuptools
2018/04/20 Python
Python使用itertools模块实现排列组合功能示例
2018/07/02 Python
利用css3-animation实现逐帧动画效果
2016/03/10 HTML / CSS
Tenstickers法国:墙贴和装饰贴纸
2019/08/26 全球购物
商务日语毕业生自荐信范文
2013/11/14 职场文书
校庆口号
2014/06/20 职场文书
学校国庆节活动总结
2015/03/23 职场文书
工作态度不好检讨书
2015/05/06 职场文书
开学随笔
2015/08/15 职场文书
导游词之藏龙百瀑景区
2019/12/30 职场文书
本地搭建minio文件服务器(使用bat脚本启动)的方法
2022/07/15 Servers
python 镜像环境搭建总结
2022/09/23 Python