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 相关文章推荐
详解Python3.1版本带来的核心变化
Apr 07 Python
利用python批量修改word文件名的方法示例
Oct 17 Python
Python入门之三角函数tan()函数实例详解
Nov 08 Python
python实现批量解析邮件并下载附件
Jun 19 Python
Python subprocess模块功能与常见用法实例详解
Jun 28 Python
Python使用字典的嵌套功能详解
Feb 27 Python
python dlib人脸识别代码实例
Apr 04 Python
Python math库 ln(x)运算的实现及原理
Jul 17 Python
python集成开发环境配置(pycharm)
Feb 14 Python
Pandas —— resample()重采样和asfreq()频度转换方式
Feb 26 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
May 27 Python
python 获取剪切板内容的两种方法
Nov 28 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
PHILIPS D1835/D1875的电路分析与打理
2021/03/02 无线电
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
2008/10/13 PHP
ThinkPHP3.1新特性之查询条件预处理简介
2014/06/19 PHP
PHP将进程作为守护进程的方法
2015/03/19 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
yii2实现根据时间搜索的方法
2016/05/25 PHP
PHP实现统计所有字符在字符串中出现次数的方法
2017/10/17 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
PHP查找一列有序数组是否包含某值的方法
2020/02/07 PHP
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
2006/11/07 Javascript
JavaScript写的一个DIV 弹出网页对话框
2009/08/14 Javascript
jQuery(非HTML5)可编辑表格实现代码
2012/12/11 Javascript
jQuery中(function(){})()执行顺序的理解
2013/03/05 Javascript
nodejs实现的一个简单聊天室功能分享
2014/12/06 NodeJs
IE浏览器下PNG相关功能
2015/07/05 Javascript
javascript实现根据汉字获取简拼
2016/09/25 Javascript
Ajax异步文件上传与NodeJS express服务端处理
2017/04/01 NodeJs
JavaScript中的遍历详解(多种遍历)
2017/04/07 Javascript
改变layer confirm弹窗按钮的颜色方法
2019/09/12 Javascript
layui 监听select选择 获取当前select的ID名称方法
2019/09/24 Javascript
Vue项目环境搭建详细总结
2019/09/26 Javascript
vue2.0实现列表数据增加和删除
2020/06/17 Javascript
Python读取图片为16进制表示简单代码
2018/01/19 Python
Python线程之定位与销毁的实现
2019/02/17 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
2019/04/29 Python
瑞典的玛丽小姐:Miss Mary of Sweden
2019/02/13 全球购物
西班牙最大的在线滑板和街头服饰商店:Fillow.net
2019/04/15 全球购物
澳大利亚办公室装修:JasonL Office Furniture
2019/06/25 全球购物
会计自我鉴定
2013/11/02 职场文书
名人演讲稿范文
2013/12/28 职场文书
领导班子四风表现材料
2014/08/23 职场文书
干部作风建设个人剖析材料
2014/10/11 职场文书
2014年物资管理工作总结
2014/12/02 职场文书
股权转让协议范本
2014/12/07 职场文书
JavaScript继承的三种方法实例
2021/05/12 Javascript
Python的代理类实现,控制访问和修改属性的权限你都了解吗
2022/03/21 Python