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实现猜数字游戏(无重复数字)示例分享
Mar 29 Python
爬山算法简介和Python实现实例
Apr 26 Python
Python THREADING模块中的JOIN()方法深入理解
Feb 18 Python
python实现向ppt文件里插入新幻灯片页面的方法
Apr 28 Python
python实现超市扫码仪计费
May 30 Python
python3.6使用urllib完成下载的实例
Dec 19 Python
对python文件读写的缓冲行为详解
Feb 13 Python
pandas删除行删除列增加行增加列的实现
Jul 06 Python
Django框架序列化与反序列化操作详解
Nov 01 Python
Python 如何创建一个简单的REST接口
Jul 30 Python
python常见的占位符总结及用法
Jul 02 Python
python周期任务调度工具Schedule使用详解
Nov 23 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 无线电
Prototype使用指南之base.js
2007/01/10 Javascript
idTabs基于JQuery的根据URL参数选择Tab插件
2012/04/11 Javascript
地址栏传递中文参数乱码在js里用escape转码
2013/08/28 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
2014/01/22 Javascript
详解JavaScript对W3C DOM模版的支持情况
2015/06/16 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
2015/10/27 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
AngularJS基础 ng-repeat 指令简单示例
2016/08/03 Javascript
js在ie下打开对话窗口的方法小结
2016/10/24 Javascript
javascript中href和replace的比较(详解)
2016/11/25 Javascript
微信小程序 template模板详解及实例
2017/02/21 Javascript
jquery 手势密码插件
2017/03/17 Javascript
axios学习教程全攻略
2017/03/26 Javascript
将 vue 生成的 js 上传到七牛的实例
2017/07/28 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
2017/12/06 Javascript
jQuery实现的淡入淡出图片轮播效果示例
2018/08/29 jQuery
javascript中innerHTML 获取或替换html内容的实现代码
2020/03/17 Javascript
Python利用pyHook实现监听用户鼠标与键盘事件
2014/08/21 Python
python如何重载模块实例解析
2018/01/25 Python
python如何在列表、字典中筛选数据
2018/03/19 Python
Python中实现单例模式的n种方式和原理
2018/11/14 Python
python logging模块书写日志以及日志分割详解
2019/07/22 Python
django认证系统 Authentication使用详解
2019/07/22 Python
css3和jquery实现自定义checkbox和radiobox组件
2014/04/22 HTML / CSS
迪奥官网:Dior.com
2018/12/04 全球购物
生产内勤岗位职责
2013/12/07 职场文书
工作作风懒散检讨书
2014/10/29 职场文书
党的群众路线教育实践活动个人对照检查材料(公安)
2014/11/05 职场文书
侵犯商业秘密的律师函
2015/05/27 职场文书
一百条裙子读书笔记
2015/07/01 职场文书
如何写好闭幕词
2019/04/02 职场文书
正确使用MySQL update语句
2021/05/26 MySQL
详解Oracle数据库中自带的所有表结构(sql代码)
2021/11/20 Oracle
SQL Server Agent 服务无法启动
2022/04/20 SQL Server