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 相关文章推荐
django自定义Field实现一个字段存储以逗号分隔的字符串
Apr 27 Python
python通过exifread模块获得图片exif信息的方法
Mar 16 Python
PyMongo安装使用笔记
Apr 27 Python
Python中元组,列表,字典的区别
May 21 Python
python实现爬取百度图片的方法示例
Jul 06 Python
python3 反射的四种基本方法解析
Aug 26 Python
python实现的登录与提交表单数据功能示例
Sep 25 Python
python实现五子棋游戏(pygame版)
Jan 19 Python
使用TensorFlow对图像进行随机旋转的实现示例
Jan 20 Python
python操作docx写入内容,并控制文本的字体颜色
Feb 13 Python
python使用pandas抽样训练数据中某个类别实例
Feb 28 Python
Python实现简单的猜单词
Jun 15 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
获取远程文件大小的php函数
2010/01/11 PHP
PHP中使用mktime获取时间戳的一个黑色幽默分析
2012/05/31 PHP
php导入csv文件碰到乱码问题的解决方法
2014/02/10 PHP
PHP中模拟链表和链表的基本操作示例
2016/02/27 PHP
微信小程序 消息推送php服务器验证实例详解
2017/03/30 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
HTML 自动伸缩的表格Table js实现
2009/04/01 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
2013/08/21 Javascript
javascript结合ajax读取txt文件内容
2014/12/05 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
2015/04/07 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
vue父组件向子组件动态传值的两种方法
2017/11/11 Javascript
JavaScript 中的12种循环遍历方法【总结】
2018/05/31 Javascript
微信小程序新手教程之启动页的重要性
2019/03/03 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
2019/11/01 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
[02:33]DOTA2英雄基础教程 司夜刺客
2013/12/04 DOTA
[02:17]2016完美“圣”典风云人物:Sccc专访
2016/12/03 DOTA
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
python+tkinter编写电脑桌面放大镜程序实例代码
2018/01/16 Python
numpy使用fromstring创建矩阵的实例
2018/06/15 Python
pandas对dataFrame中某一个列的数据进行处理的方法
2019/07/08 Python
Python作用域与名字空间原理详解
2020/03/21 Python
HTML5拖拽文件上传的示例代码
2021/03/04 HTML / CSS
惠普美国官方商店:HP Official Store
2016/08/28 全球购物
如何用JQuery进行表单验证
2013/05/29 面试题
结构工程个人自荐信范文
2013/11/30 职场文书
小学生安全保证书
2014/02/01 职场文书
办公室副主任职责范本
2014/03/08 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
房地产置业顾问工作总结
2015/10/23 职场文书
小学班主任培训心得体会
2016/01/07 职场文书
大学生社区义工服务心得体会
2016/01/22 职场文书
如果用一句诗总结你的上半年,你会用哪句呢?
2019/07/16 职场文书
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
2021/06/08 Python