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批量提交沙箱问题实例
Oct 08 Python
python根据出生日期返回年龄的方法
Mar 26 Python
在Django的session中使用User对象的方法
Jul 23 Python
12步入门Python中的decorator装饰器使用方法
Jun 20 Python
多版本Python共存的配置方法
May 22 Python
Django中的ajax请求
Oct 19 Python
python爬虫超时的处理的实例
Dec 19 Python
Python中新式类与经典类的区别详析
Jul 10 Python
python提取照片坐标信息的实例代码
Aug 14 Python
Tensorflow加载Vgg预训练模型操作
May 26 Python
手把手教你用Django执行原生SQL的方法
Feb 18 Python
详解Python常用的魔法方法
Jun 03 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
10条PHP高级技巧[修正版]
2011/08/02 PHP
Win7下手动安装apache2.2、php5.4笔记
2015/04/03 PHP
Javascript 布尔型分析
2008/12/22 Javascript
5款Javascript颜色选择器
2009/10/25 Javascript
页面版文本框智能提示JS代码
2009/11/20 Javascript
JavaScript Event学习第六章 事件的访问
2010/02/07 Javascript
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
JavaScript起点(严格模式深度了解)
2013/01/28 Javascript
jqplot通过ajax动态画折线图的方法及思路
2013/12/08 Javascript
JavaScript通过join函数连接数组里所有元素的方法
2015/03/20 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
javascript创建对象、对象继承的实用方式详解
2016/03/08 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
微信小程序引入Vant组件库过程解析
2019/08/06 Javascript
Egg Vue SSR 服务端渲染数据请求与asyncData
2019/11/24 Javascript
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python实时分析日志的一个小脚本分享
2017/05/07 Python
python实现自动发送邮件发送多人、群发、多附件的示例
2018/01/23 Python
Python3 安装PyQt5及exe打包图文教程
2019/01/08 Python
python plotly画柱状图代码实例
2019/12/13 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
使用matplotlib动态刷新指定曲线实例
2020/04/23 Python
django 外键创建注意事项说明
2020/05/20 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
很酷的HTML5电子书翻页动画特效
2016/02/25 HTML / CSS
工程造价管理专业大专生求职信
2013/10/06 职场文书
鞋类设计与工艺专业销售求职信
2013/11/01 职场文书
西式婚礼证婚词
2014/01/12 职场文书
运动会通讯稿50字
2014/01/30 职场文书
个人贷款担保书
2014/04/01 职场文书
房屋继承公证书
2014/04/10 职场文书
组织鉴定材料
2014/06/02 职场文书
教师节主题班会教案
2015/08/17 职场文书
青年干部培训班学习心得体会
2016/01/06 职场文书