tensorflow创建变量以及根据名称查找变量


Posted in Python onMarch 10, 2018

环境:Ubuntu14.04,tensorflow=1.4(bazel源码安装),Anaconda python=3.6

声明变量主要有两种方法:tf.Variabletf.get_variable,二者的最大区别是:

(1) tf.Variable是一个类,自带很多属性函数;而 tf.get_variable是一个函数;
(2) tf.Variable只能生成独一无二的变量,即如果给出的name已经存在,则会自动修改生成新的变量name;
(3) tf.get_variable可以用于生成共享变量。默认情况下,该函数会进行变量名检查,如果有重复则会报错。当在指定变量域中声明可

以变量共享时,可以重复使用该变量(例如RNN中的参数共享)。
下面给出简单的的示例程序:

import tensorflow as tf

with tf.variable_scope('scope1',reuse=tf.AUTO_REUSE) as scope1:
  x1 = tf.Variable(tf.ones([1]),name='x1')
  x2 = tf.Variable(tf.zeros([1]),name='x1')
  y1 = tf.get_variable('y1',initializer=1.0)
  y2 = tf.get_variable('y1',initializer=0.0)
  init = tf.global_variables_initializer()
  with tf.Session() as sess:
    sess.run(init)
    print(x1.name,x1.eval())
    print(x2.name,x2.eval())
    print(y1.name,y1.eval())
    print(y2.name,y2.eval())

输出结果为:

scope1/x1:0 [ 1.]
scope1/x1_1:0 [ 0.]
scope1/y1:0 1.0
scope1/y1:0 1.0

1. tf.Variable(…)

tf.Variable(…)使用给定初始值来创建一个新变量,该变量会默认添加到 graph collections listed in collections, which defaults to [GraphKeys.GLOBAL_VARIABLES]。

如果trainable属性被设置为True,该变量同时也会被添加到graph collection GraphKeys.TRAINABLE_VARIABLES.

# tf.Variable
__init__(
  initial_value=None,
  trainable=True,
  collections=None,
  validate_shape=True,
  caching_device=None,
  name=None,
  variable_def=None,
  dtype=None,
  expected_shape=None,
  import_scope=None,
  constraint=None
)

2. tf.get_variable(…)

tf.get_variable(…)的返回值有两种情形:

使用指定的initializer来创建一个新变量;
当变量重用时,根据变量名搜索返回一个由tf.get_variable创建的已经存在的变量;

get_variable(
  name,
  shape=None,
  dtype=None,
  initializer=None,
  regularizer=None,
  trainable=True,
  collections=None,
  caching_device=None,
  partitioner=None,
  validate_shape=True,
  use_resource=None,
  custom_getter=None,
  constraint=None
)

3. 根据名称查找变量

在创建变量时,即使我们不指定变量名称,程序也会自动进行命名。于是,我们可以很方便的根据名称来查找变量,这在抓取参数、finetune模型等很多时候都很有用。

示例1:

通过在tf.global_variables()变量列表中,根据变量名进行匹配搜索查找。 该种搜索方式,可以同时找到由tf.Variable或者tf.get_variable创建的变量。

import tensorflow as tf

x = tf.Variable(1,name='x')
y = tf.get_variable(name='y',shape=[1,2])
for var in tf.global_variables():
  if var.name == 'x:0':
    print(var)

示例2:

利用get_tensor_by_name()同样可以获得由tf.Variable或者tf.get_variable创建的变量。
需要注意的是,此时获得的是Tensor, 而不是Variable,因此 x不等于x1.

import tensorflow as tf

x = tf.Variable(1,name='x')
y = tf.get_variable(name='y',shape=[1,2])

graph = tf.get_default_graph()

x1 = graph.get_tensor_by_name("x:0")
y1 = graph.get_tensor_by_name("y:0")

示例3:

针对tf.get_variable创建的变量,可以利用变量重用来直接获取已经存在的变量。

with tf.variable_scope("foo"):
  bar1 = tf.get_variable("bar", (2,3)) # create

with tf.variable_scope("foo", reuse=True):
  bar2 = tf.get_variable("bar") # reuse

with tf.variable_scope("", reuse=True): # root variable scope
  bar3 = tf.get_variable("foo/bar") # reuse (equivalent to the above)

print((bar1 is bar2) and (bar2 is bar3))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python复制与引用用法分析
Apr 08 Python
在Python中处理XML的教程
Apr 29 Python
TensorFlow如何实现反向传播
Feb 06 Python
Python实现简单求解给定整数的质因数算法示例
Mar 25 Python
Python基础教程之利用期物处理并发
Mar 29 Python
python 遍历列表提取下标和值的实例
Dec 25 Python
Python数据可视化教程之Matplotlib实现各种图表实例
Jan 13 Python
Django上线部署之IIS的配置方法
Aug 22 Python
python自动化测试无法启动谷歌浏览器问题
Oct 10 Python
在OpenCV里使用Camshift算法的实现
Nov 22 Python
Python递归调用实现数字累加的代码
Feb 25 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
Dec 24 Python
Python2中文处理纪要的实现方法
Mar 10 #Python
python实现冒泡排序算法的两种方法
Mar 10 #Python
Python使用pyh生成HTML文档的方法示例
Mar 10 #Python
tensorflow获取变量维度信息
Mar 10 #Python
TensorFlow变量管理详解
Mar 10 #Python
TensorFlow神经网络优化策略学习
Mar 09 #Python
TensorFlow实现AutoEncoder自编码器
Mar 09 #Python
You might like
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
php计算程序运行时间的简单例子分享
2014/05/10 PHP
PHP中读取文件的几个方法总结(推荐)
2016/06/03 PHP
一个简单安全的PHP验证码类 附调用方法
2016/06/24 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
2019/12/12 PHP
使用js的replace()方法查找字符示例代码
2013/10/28 Javascript
js浮点数精确计算(加、减、乘、除)
2013/12/26 Javascript
jQuery中filter()方法用法实例
2015/01/06 Javascript
Jquery中find与each方法用法实例
2015/02/04 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
2015/09/01 Javascript
基于javascript实现泡泡大冒险网页版小游戏
2016/03/23 Javascript
JavaScript数组合并的多种方法
2016/05/22 Javascript
JS随机打乱数组的方法小结
2016/06/22 Javascript
js完整倒计时代码分享
2016/09/18 Javascript
JS实现的添加弹出层并完成锁屏操作示例
2017/04/07 Javascript
Angular4表单验证代码详解
2017/09/03 Javascript
微信小程序用户信息encryptedData详解
2018/08/24 Javascript
详解JavaScript函数callee、call、apply的区别
2019/03/08 Javascript
如何在Angular应用中创建包含组件方法示例
2019/03/23 Javascript
vue中多个倒计时实现代码实例
2019/03/27 Javascript
layui实现鼠标移动到单元格上显示数据的方法
2019/09/11 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
Python中的filter()函数的用法
2015/04/27 Python
利用Python爬取微博数据生成词云图片实例代码
2017/08/31 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
pytorch 修改预训练model实例
2020/01/18 Python
商务日语毕业生自荐信
2013/11/23 职场文书
高一历史教学反思
2014/01/13 职场文书
军校大学生个人的自我评价
2014/02/17 职场文书
2015年专项整治工作总结
2015/04/03 职场文书
2015年秋季运动会加油稿
2015/07/22 职场文书
2019年干货:自我鉴定
2019/03/25 职场文书
css3实现背景图片半透明内容不透明的方法示例
2021/04/13 HTML / CSS
React 高阶组件HOC用法归纳
2021/06/13 Javascript
HTML静态页面获取url参数和UserAgent的实现
2022/08/05 HTML / CSS