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的WEB框架Flask中使用多个配置文件的解决方法
Apr 18 Python
TensorFlow深度学习之卷积神经网络CNN
Mar 09 Python
Flask 让jsonify返回的json串支持中文显示的方法
Mar 26 Python
python对离散变量的one-hot编码方法
Jul 11 Python
解决python写入带有中文的字符到文件错误的问题
Jan 31 Python
python使用pandas处理excel文件转为csv文件的方法示例
Jul 18 Python
用python3 urllib破解有道翻译反爬虫机制详解
Aug 14 Python
如何使用python实现模拟鼠标点击
Jan 06 Python
Python实现鼠标自动在屏幕上随机移动功能
Mar 14 Python
详解Python IO编程
Jul 24 Python
python爬虫今日热榜数据到txt文件的源码
Feb 23 Python
python基于机器学习预测股票交易信号
May 25 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进行MySQL删除记录操作代码
2008/06/07 PHP
来自phpguru得Php Cache类源码
2010/04/15 PHP
PHP多线程抓取网页实现代码
2010/07/22 PHP
PHP SEO优化之URL优化方法
2011/04/21 PHP
探讨PHP中OO之静态关键字以及类常量的详解
2013/06/07 PHP
用php来限制每个ip每天浏览页面数量的实现思路
2015/02/24 PHP
[原创]php实现 data url的图片生成与保存
2016/12/04 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
2019/10/18 PHP
判断JavaScript对象是否可用的最正确方法分析
2008/10/03 Javascript
setTimeout和setInterval的区别你真的了解吗?
2011/03/31 Javascript
Javascript实现带关闭按钮的网页漂浮广告代码
2014/01/12 Javascript
JavaScript函数定义的常见注意事项小结
2014/09/16 Javascript
JavaScript中document.forms[0]与getElementByName区别
2015/01/21 Javascript
JS限制文本框只能输入数字和字母方法
2015/02/28 Javascript
javascript实现的固定位置悬浮窗口实例
2015/04/30 Javascript
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
2016/08/25 Javascript
浅谈Angular中ngModel的$render
2016/10/24 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
js模拟微博发布消息
2017/02/23 Javascript
通过npm引用的vue组件使用详解
2017/03/02 Javascript
jquery PrintArea 实现票据的套打功能(代码)
2017/03/17 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
2017/06/17 Javascript
详解JavaScript中typeof与instanceof用法
2018/10/24 Javascript
基于Python log 的正确打开方式
2018/04/28 Python
python实现猜单词小游戏
2020/05/22 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
一文轻松掌握python语言命名规范规则
2020/06/18 Python
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
Notino罗马尼亚网站:购买香水和化妆品
2019/07/20 全球购物
英国历史最悠久的DJ设备供应商:DJ Finance、DJ Warehouse、The DJ Shop
2019/09/04 全球购物
如何用JQuery进行表单验证
2013/05/29 面试题
校长创先争优承诺书
2014/08/30 职场文书
幼儿园五一劳动节活动总结
2015/02/09 职场文书
如何正确理解python装饰器
2021/06/15 Python
服务器nginx权限被拒绝解决案例
2022/09/23 Servers