TensorFlow变量管理详解


Posted in Python onMarch 10, 2018

一、TensorFlow变量管理

1. TensorFLow还提供了tf.get_variable函数来创建或者获取变量,tf.variable用于创建变量时,其功能和tf.Variable基本是等价的。tf.get_variable中的初始化方法(initializer)的参数和tf.Variable的初始化过程也类似,initializer函数和tf.Variable的初始化方法是一一对应的,详见下表。

TensorFlow变量管理详解

tf.get_variable和tf.Variable最大的区别就在于指定变量名称的参数。对于tf.Variable函数,变量名称是一个可选的参数,通过name=”v”的形式给出,对于tf.get_variable函数,变量名称是一个必填的参数,tf.get_variable会根据这个名称去创建或者获取变量。

2. 通过tf.variable_scope函数可以控制tf.get_variable函数的语义。当tf.variable_scope函数的参数reuse=True生成上下文管理器时,该上下文管理器内的所有的tf.get_variable函数会直接获取已经创建的变量,如果变量不存在则报错;当tf.variable_scope函数的参数reuse=False或者None时创建的上下文管理器中,tf.get_variable函数则直接创建新的变量,若同名的变量已经存在则报错。

3. 另tf.variable_scope函数是可以嵌套使用的。嵌套的时候,若某层上下文管理器未声明reuse参数,则该层上下文管理器的reuse参数与其外层保持一致。

4.tf.variable_scope函数提供了一个管理变量命名空间的方式。在tf.variable_scope中创建的变量,名称.name中名称前面会加入命名空间的名称,并通过“/”来分隔命名空间的名称和变量的名称。tf.get_variable("foou/baru/u", [1]),可以通过带命名空间名称的变量名来获取其命名空间下的变量。

二、TensorFlow编程演示

import tensorflow as tf 
 
# 在名字为foo的命名空间内创建名字为v的变量 
with tf.variable_scope("foo"): 
  v = tf.get_variable("v", [1], initializer=tf.constant_initializer(1.0)) 
 
''''' 
# 因为命名空间foo内已经存在变量v,再次创建则报错 
with tf.variable_scope("foo"): 
  v = tf.get_variable("v", [1]) 
# ValueError: Variable foo/v already exists, disallowed. 
# Did you mean to set reuse=True in VarScope? 
''' 
# 将参数reuse参数设置为True,则tf.get_variable可直接获取已声明的变量 
with tf.variable_scope("foo", reuse=True): 
  v1 = tf.get_variable("v", [1]) 
  print(v == v1) # True 
 
''''' 
# 当reuse=True时,tf.get_variable只能获取指定命名空间内的已创建的变量 
with tf.variable_scope("bar", reuse=True): 
  v2 = tf.get_variable("v", [1]) 
# ValueError: Variable bar/v does not exist, or was not created with 
# tf.get_variable(). Did you mean to set reuse=None in VarScope? 
''' 
 
with tf.variable_scope("root"): 
  # 通过tf.get_variable_scope().reuse函数获取当前上下文管理器内的reuse参数取值 
  print(tf.get_variable_scope().reuse) # False 
 
  with tf.variable_scope("foo1", reuse=True): 
    print(tf.get_variable_scope().reuse) # True 
 
    with tf.variable_scope("bar1"): 
      # 嵌套在上下文管理器foo1内的bar1内未指定reuse参数,则保持与外层一致 
      print(tf.get_variable_scope().reuse) # True 
 
  print(tf.get_variable_scope().reuse) # False 
 
# tf.variable_scope函数提供了一个管理变量命名空间的方式 
u1 = tf.get_variable("u", [1]) 
print(u1.name) # u:0 
with tf.variable_scope("foou"): 
  u2 = tf.get_variable("u", [1]) 
  print(u2.name) # foou/u:0 
 
with tf.variable_scope("foou"): 
  with tf.variable_scope("baru"): 
    u3 = tf.get_variable("u", [1]) 
    print(u3.name) # foou/baru/u:0 
 
  u4 = tf.get_variable("u1", [1]) 
  print(u4.name) # foou/u1:0 
 
# 可直接通过带命名空间名称的变量名来获取其命名空间下的变量 
with tf.variable_scope("", reuse=True): 
  u5 = tf.get_variable("foou/baru/u", [1]) 
  print(u5.name) # foou/baru/u:0 
  print(u5 == u3) # True 
  u6 = tf.get_variable("foou/u1", [1]) 
  print(u6.name) # foou/u1:0 
  print(u6 == u4) # True

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
Nov 28 Python
python使用三角迭代计算圆周率PI的方法
Mar 20 Python
使用Python的Zato发送AMQP消息的教程
Apr 16 Python
python使用PyGame播放Midi和Mp3文件的方法
Apr 24 Python
Python Selenium 之数据驱动测试的实现
Aug 01 Python
关于ZeroMQ 三种模式python3实现方式
Dec 23 Python
Python日期格式和字符串格式相互转换的方法
Feb 18 Python
基于jupyter代码无法在pycharm中运行的解决方法
Apr 21 Python
Python数据可视化图实现过程详解
Jun 12 Python
DataFrame 数据合并实现(merge,join,concat)
Jun 14 Python
Python执行时间的几种计算方法
Jul 31 Python
Python之matplotlib绘制折线图
Apr 13 Python
TensorFlow神经网络优化策略学习
Mar 09 #Python
TensorFlow实现AutoEncoder自编码器
Mar 09 #Python
TensorFlow实现MLP多层感知机模型
Mar 09 #Python
TensorFlow实现Softmax回归模型
Mar 09 #Python
用python实现百度翻译的示例代码
Mar 09 #Python
TensorFlow深度学习之卷积神经网络CNN
Mar 09 #Python
TensorFlow实现卷积神经网络CNN
Mar 09 #Python
You might like
PHP的博客ping服务代码
2012/02/04 PHP
PHP高效获取远程图片尺寸和大小的实现方法
2017/10/20 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
2019/05/08 PHP
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
JavaScript去掉空格的方法集合
2010/12/28 Javascript
jQuery EasyUI API 中文文档 - Menu菜单
2011/10/03 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
2013/09/13 Javascript
javascript打印html内容功能的方法示例
2013/11/28 Javascript
我用的一些Node.js开发工具、开发包、框架等总结
2014/09/25 Javascript
使用phantomjs进行网页抓取的实现代码
2014/09/29 Javascript
node.js中的fs.futimes方法使用说明
2014/12/17 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
2015/06/03 Javascript
高性能JavaScript DOM编程(1)
2015/08/11 Javascript
JavaScript ES5标准中新增的Array方法
2016/06/28 Javascript
spring+angular实现导出excel的实现代码
2019/02/27 Javascript
原生js实现无缝轮播图
2020/01/11 Javascript
JavaScript监听键盘事件代码实现
2020/06/03 Javascript
vue 出现data-v-xxx的原因及解决
2020/08/04 Javascript
解决Element中el-date-picker组件不回填的情况
2020/11/07 Javascript
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
[34:10]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
2015/03/30 Python
举例详解Python中yield生成器的用法
2015/08/05 Python
Python实现拷贝多个文件到同一目录的方法
2016/09/19 Python
Python 2.7中文显示与处理方法
2018/07/16 Python
python之验证码生成(gvcode与captcha)
2019/01/02 Python
python中update的基本使用方法详解
2019/07/17 Python
Python之Class&Object用法详解
2019/12/25 Python
事业单位鉴定材料
2014/05/25 职场文书
三八妇女节演讲稿
2014/05/27 职场文书
机械设计制造及其自动化专业求职信
2014/06/17 职场文书
小城镇建设汇报材料
2014/08/16 职场文书
见习报告怎么写
2014/10/31 职场文书
谢师宴家长答谢词
2015/09/30 职场文书
解析:创业计划书和商业计划书二者之间到底有什么区别
2019/08/14 职场文书
mysql中如何用命令创建联合唯一索引
2022/04/20 MySQL