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 相关文章推荐
pyqt和pyside开发图形化界面
Jan 22 Python
对python的bytes类型数据split分割切片方法
Dec 04 Python
Python删除n行后的其他行方法
Jan 28 Python
关于python字符串方法分类详解
Aug 20 Python
Python实现使用dir获取类的方法列表
Dec 24 Python
Python输出指定字符串的方法
Feb 06 Python
Django用数据库表反向生成models类知识点详解
Mar 25 Python
使用python+poco+夜神模拟器进行自动化测试实例
Apr 23 Python
Python unittest单元测试框架实现参数化
Apr 29 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
Jun 23 Python
python中Django文件上传方法详解
Aug 05 Python
Python3 ffmpeg视频转换工具使用方法解析
Aug 10 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
smarty模板引擎中内建函数if、elseif和else的使用方法
2015/01/22 PHP
PHP使用PDO抽象层获取查询结果的方法示例
2018/05/10 PHP
javascript Prototype 对象扩展
2009/05/15 Javascript
JavaScript初学者需要了解10个小技巧
2010/08/25 Javascript
学习面向对象之面向对象的术语
2010/11/30 Javascript
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
js判断IE浏览器版本过低示例代码
2013/11/22 Javascript
node.js中实现同步操作的3种实现方法
2014/12/05 Javascript
DOM 高级编程
2015/05/06 Javascript
详解JavaScript ES6中的模板字符串
2015/07/28 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
AngularJS表单验证功能
2017/10/19 Javascript
ES6 javascript中class类的get与set用法实例分析
2017/10/30 Javascript
发布Angular应用至生产环境的方法
2018/12/10 Javascript
vue实现路由不变的情况下,刷新页面操作示例
2020/02/02 Javascript
[48:26]VGJ.S vs infamous Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
Python多进程同步Lock、Semaphore、Event实例
2014/11/21 Python
python将文本转换成图片输出的方法
2015/04/28 Python
python修改操作系统时间的方法
2015/05/18 Python
python爬取NUS-WIDE数据库图片
2016/10/05 Python
python+opencv实现的简单人脸识别代码示例
2017/11/14 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
2018/11/30 Python
如何使用python进行pdf文件分割
2019/11/11 Python
详解Django3中直接添加Websockets方式
2020/02/12 Python
浅析HTML5 Landmark
2020/09/11 HTML / CSS
LTD Commodities:礼品,独特发现,家居装饰,家用器皿
2017/08/11 全球购物
手工制作的男士奢华英国鞋和服装之家:Goodwin Smith
2019/06/21 全球购物
马来西亚户外装备商店:PTT Outdoor
2019/07/13 全球购物
金属材料工程个人求职的自我评价
2013/12/04 职场文书
学生检讨书如何写
2014/10/30 职场文书
家装业务员岗位职责
2015/04/03 职场文书
火烧圆明园观后感
2015/06/03 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
法人代表证明书范本
2015/06/18 职场文书
win10电脑双屏显示一个黑屏怎么办?win10电脑双屏显示一个黑屏解决方法
2022/07/15 数码科技