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 相关文章推荐
浅谈numpy库的常用基本操作方法
Jan 09 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
Jun 26 Python
python按修改时间顺序排列文件的实例代码
Jul 25 Python
python函数的作用域及关键字详解
Aug 20 Python
python实现的生成word文档功能示例
Aug 23 Python
python字符串替换re.sub()方法解析
Sep 18 Python
Python一行代码解决矩阵旋转的问题
Nov 30 Python
Python 限定函数参数的类型及默认值方式
Dec 24 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
Mar 20 Python
基于python实现把json数据转换成Excel表格
May 07 Python
Python descriptor(描述符)的实现
Nov 15 Python
python中最小二乘法详细讲解
Feb 19 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
咖啡知识大全
2021/03/03 新手入门
PHP 配置文件中open_basedir选项作用
2009/07/19 PHP
php下获取客户端ip地址的函数
2010/03/15 PHP
php中使用preg_match_all匹配文章中的图片
2013/02/06 PHP
PHP删除目录及目录下所有文件的方法详解
2013/06/06 PHP
国外十大最流行的PHP框架排名
2013/07/04 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
ie focus bug 解决方法
2009/09/03 Javascript
javascript中的new使用
2010/03/20 Javascript
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
jQuery阻止同类型事件小结
2013/04/19 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
js动态添加表格数据使用insertRow和insertCell实现
2014/05/22 Javascript
javascript arguments使用示例
2014/12/16 Javascript
javascript操作数组详解
2014/12/17 Javascript
js格式化时间的方法
2015/12/18 Javascript
聊一聊JavaScript作用域和作用域链
2016/05/03 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
jQuery异步提交表单实例
2017/05/30 jQuery
jQuery事件_动力节点Java学院整理
2017/07/05 jQuery
详解在React里使用"Vuex"
2018/04/02 Javascript
Vue源码探究之状态初始化
2018/11/14 Javascript
微信小程序与webview交互实现支付功能
2019/06/07 Javascript
Vue实现商品分类菜单数量提示功能
2019/07/26 Javascript
vue tab滚动到一定高度,固定在顶部,点击tab切换不同的内容操作
2020/07/22 Javascript
vue通过接口直接下载java生成好的Excel表格案例
2020/10/26 Javascript
详解Python的数据库操作(pymysql)
2019/04/04 Python
Python pandas用法最全整理
2019/08/04 Python
CSS3用@font-face实现自定义英文字体
2013/09/23 HTML / CSS
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
不尊敬老师检讨书范文
2014/11/19 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书
Nginx跨域问题解析与解决
2022/08/05 Servers