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实现爬取知乎神回复简单爬虫代码分享
Jan 04 Python
用python 制作图片转pdf工具
Jan 30 Python
Python中有趣在__call__函数
Jun 21 Python
Python面向对象class类属性及子类用法分析
Feb 02 Python
python删除不需要的python文件方法
Apr 24 Python
python 获取当天每个准点时间戳的实例
May 22 Python
解决Python安装时报缺少DLL问题【两种解决方法】
Jul 15 Python
python 使用递归回溯完美解决八皇后的问题
Feb 26 Python
如何基于线程池提升request模块效率
Apr 18 Python
python创建文本文件的简单方法
Aug 30 Python
Python 带星号(* 或 **)的函数参数详解
Feb 23 Python
python实现自动化群控的步骤
Apr 11 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中str_pad()函数用法分析
2017/03/28 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
php 读取文件夹下所有图片、文件的实例
2018/10/17 PHP
Laravel 5.5 异常处理 & 错误日志的解决
2019/10/17 PHP
javascript 尚未实现错误解决办法
2008/11/27 Javascript
用jQuery中的ajax分页实现代码
2011/09/20 Javascript
javaScript函数中执行C#代码中的函数方法总结
2013/08/07 Javascript
JS 新增Cookie 取cookie值 删除cookie 举例详解
2014/10/10 Javascript
js操作滚动条事件实例
2015/01/29 Javascript
jquery实现滑屏大图定时收缩为小banner图片的广告代码
2015/09/02 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
AngularJS 如何在控制台进行错误调试
2016/06/07 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
2016/07/11 Javascript
AngularJS入门教程之Scope(作用域)
2016/07/27 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
react-native之ART绘图方法详解
2017/08/08 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
详解ES6 Promise对象then方法链式调用
2018/10/20 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
vuex实现购物车功能
2020/06/28 Javascript
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
JS addEventListener()和attachEvent()方法实现注册事件
2021/01/11 Javascript
Python编程中用close()方法关闭文件的教程
2015/05/24 Python
python中实现数组和列表读取一列的方法
2018/04/03 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
2018/04/18 Python
python安装twisted的问题解析
2018/08/21 Python
Python使用requests模块爬取百度翻译
2020/08/25 Python
浅析移动设备HTML5页面布局
2015/12/01 HTML / CSS
The Beach People美国:澳洲海滨奢华品牌
2018/07/05 全球购物
学习三严三实对照检查材料思想汇报
2014/09/22 职场文书
老兵退伍标语
2014/10/07 职场文书
四风专项整治工作情况汇报
2014/10/28 职场文书
小学教代会开幕词
2016/03/04 职场文书
2019年幼儿园管理条例范本!
2019/07/17 职场文书
MYSQL如何查看进程和kill进程
2022/03/13 MySQL