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处理cookie详解
Feb 07 Python
python抓取网页内容示例分享
Feb 24 Python
python中__call__方法示例分析
Oct 11 Python
Python 关于反射和类的特殊成员方法
Sep 14 Python
利用numpy实现一、二维数组的拼接简单代码示例
Dec 15 Python
python实现一个简单的并查集的示例代码
Mar 19 Python
python脚本实现验证码识别
Jun 07 Python
使用Py2Exe for Python3创建自己的exe程序示例
Oct 31 Python
Python进程间通信Queue消息队列用法分析
May 22 Python
TensorFlow打印输出tensor的值
Apr 19 Python
如何通过Python3和ssl实现加密通信功能
May 09 Python
python json.dumps() json.dump()的区别详解
Jul 14 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
CodeIgniter php mvc框架 中国网站
2008/05/26 PHP
php 文件缓存函数
2011/10/08 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
2014/10/30 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
PHP抽奖算法程序代码分享
2015/10/08 PHP
PHP数组生成XML格式数据的封装类实例
2016/11/10 PHP
共享自己写一个框架DreamScript
2007/01/20 Javascript
js left,right,mid函数
2008/06/10 Javascript
javascript IE中的DOM ready应用技巧
2008/07/23 Javascript
jquery监控数据是否变化(修正版)
2011/04/12 Javascript
javascript代码编写需要注意的7个小细节小结
2011/09/21 Javascript
关于jQuery object and DOM element
2013/04/15 Javascript
使用node.js半年来总结的 10 条经验
2014/08/18 Javascript
JS模拟实现Select效果代码
2015/09/24 Javascript
jquery ui dialog替代confirm实例分析
2016/01/25 Javascript
js实现3D图片环展示效果
2017/03/09 Javascript
js用类封装pop弹窗组件
2017/10/08 Javascript
详解如何实现一个简单的 vuex
2018/02/10 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
详解如何更好的使用module vuex
2019/03/27 Javascript
[01:03:27]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
实例讲解Python的函数闭包使用中应注意的问题
2016/06/20 Python
浅谈python3发送post请求参数为空的情况
2018/12/28 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
2021/01/28 Python
世界上最大的糖果店:Dylan’s Candy Bar
2017/11/07 全球购物
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
实习生的自我鉴定范文欣赏
2013/11/20 职场文书
大三学生入党思想汇报
2014/01/02 职场文书
四年大学自我鉴定
2014/02/17 职场文书
公务员个人考察材料
2014/12/23 职场文书
设备技术员岗位职责
2015/04/11 职场文书
校运会加油稿大全
2015/07/22 职场文书
如何利用JavaScript实现二叉搜索树
2021/04/02 Javascript
Python游戏开发实例之graphics实现AI五子棋
2021/11/01 Python
Minikube搭建Kubernetes集群
2022/03/31 Servers