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抓取京东商城手机列表url实例代码
Dec 18 Python
Python pickle类库介绍(对象序列化和反序列化)
Nov 21 Python
利用Psyco提升Python运行速度
Dec 24 Python
Python中优化NumPy包使用性能的教程
Apr 23 Python
举例讲解Python中的Null模式与桥接模式编程
Feb 02 Python
python 调用win32pai 操作cmd的方法
May 28 Python
Python实现求笛卡尔乘积的方法
Sep 16 Python
Python AES加密实例解析
Jan 18 Python
解决Python内层for循环如何break出外层的循环的问题
Jun 24 Python
Pandas之Fillna填充缺失数据的方法
Jun 25 Python
python七种方法判断字符串是否包含子串
Aug 18 Python
python操作xlsx格式文件并读取
Jun 02 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中的时间处理
2006/10/09 PHP
php数据结构与算法(PHP描述) 快速排序 quick sort
2012/06/21 PHP
php获取汉字拼音首字母的方法
2015/10/21 PHP
PHPMAILER实现PHP发邮件功能
2018/04/18 PHP
Javascript中的数学函数
2007/04/04 Javascript
关于IE7 IE8弹出窗口顶上
2008/12/22 Javascript
通过DOM脚本去设置样式信息
2010/09/19 Javascript
Javascript 面试题随笔
2011/03/31 Javascript
JQuery的ready函数与JS的onload的区别详解
2013/11/21 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
2016/08/11 Javascript
AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示】
2016/12/13 Javascript
nodejs实现爬取网站图片功能
2017/12/14 NodeJs
使用layui 渲染table数据表格的实例代码
2018/08/19 Javascript
浅谈js中的attributes和Attribute的用法与区别
2020/07/16 Javascript
vue中template的三种写法示例
2020/10/21 Javascript
利用Vue实现简易播放器的完整代码
2020/12/30 Vue.js
[02:26]2018DOTA2亚洲邀请赛赛前采访-Newbee篇
2018/04/03 DOTA
Python里隐藏的“禅”
2014/06/16 Python
各个系统下的Python解释器相关安装方法
2015/10/12 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
2018/10/15 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
Html5 audio标签样式的修改
2016/01/28 HTML / CSS
使用html5 canvas绘制圆环动效
2019/06/03 HTML / CSS
德国知名健康零食网上商店:Seeberger
2017/07/27 全球购物
送给他或她的礼物:FUN.com
2018/08/17 全球购物
EJB timer的种类
2014/10/28 面试题
运动会跳远广播稿
2014/02/04 职场文书
母亲节感恩寄语
2014/02/21 职场文书
明信片寄语大全
2014/04/08 职场文书
酒店开业策划方案
2014/06/02 职场文书
公司授权委托书
2014/10/17 职场文书
2015年教师党员自我评价材料
2015/03/04 职场文书
2015年家长学校工作总结
2015/04/22 职场文书
盗窃案辩护词
2015/05/21 职场文书
工作年限证明范本
2015/06/15 职场文书
《折线统计图》教学反思
2016/02/22 职场文书