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网络编程学习笔记(四):域名系统
Jun 09 Python
Python编写检测数据库SA用户的方法
Jul 11 Python
python使用PIL模块实现给图片打水印的方法
May 22 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
May 25 Python
Python连接数据库学习之DB-API详解
Feb 07 Python
python计算auc指标实例
Jul 13 Python
django的登录注册系统的示例代码
May 14 Python
Python3用tkinter和PIL实现看图工具
Jun 21 Python
python 模拟创建seafile 目录操作示例
Sep 26 Python
如何设置PyCharm中的Python代码模版(推荐)
Nov 20 Python
Django视图类型总结
Feb 17 Python
pytorch实现线性回归以及多元回归
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
自己动手,丰衣足食 - 短波框形天线制作
2021/03/01 无线电
php 动态多文件上传
2009/01/18 PHP
php下使用iconv需要注意的问题
2010/11/20 PHP
PHP sprintf() 函数的应用(定义和用法)
2012/06/29 PHP
php长字符串定义方法
2012/07/12 PHP
PHP获取当前完整URL地址的函数
2014/12/21 PHP
thinkPHP5.0框架环境变量配置方法
2017/03/17 PHP
asp批量修改记录的代码
2008/06/25 Javascript
jQuery ready函数滥用分析
2011/02/16 Javascript
推荐40个简单的 jQuery 导航插件和教程(下篇)
2012/09/14 Javascript
chrome不支持form.submit的解决方案
2015/04/28 Javascript
浅析AngularJS中的指令
2016/03/20 Javascript
Angular的事件和表单详解
2016/12/26 Javascript
JavaScript实现时钟滴答声效果
2017/01/29 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
vue移动端UI框架实现QQ侧边菜单组件
2018/03/09 Javascript
微信小程序从注册账号到上架(图文详解)
2019/07/17 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
JavaScript实现省市联动效果
2019/11/22 Javascript
redux处理异步action解决方案
2020/03/22 Javascript
Vue computed 计算属性代码实例
2020/04/22 Javascript
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
python opencv minAreaRect 生成最小外接矩形的方法
2019/07/01 Python
python之array赋值技巧分享
2019/11/28 Python
python 实现turtle画图并导出图片格式的文件
2019/12/07 Python
Python Django form 组件动态从数据库取choices数据实例
2020/05/19 Python
HTML5网页音乐播放器的示例代码
2017/11/09 HTML / CSS
Hotels.com越南:酒店预订
2019/10/29 全球购物
值传递还是引用传递
2015/02/08 面试题
领导班子整改措施
2014/10/24 职场文书
满月酒邀请函
2015/01/30 职场文书
投标单位介绍信
2015/05/05 职场文书
党员进社区活动总结
2015/05/07 职场文书
JavaScript实现显示和隐藏图片
2021/04/29 Javascript
JS 基本概念详细介绍
2021/10/16 Javascript
python开发制作好看的时钟效果
2022/05/02 Python