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中threading超线程用法实例分析
May 16 Python
Windows中安装使用Virtualenv来创建独立Python环境
May 31 Python
解析Python中的__getitem__专有方法
Jun 27 Python
Python第三方库h5py_读取mat文件并显示值的方法
Feb 08 Python
pyqt远程批量执行Linux命令程序的方法
Feb 14 Python
python实现动态创建类的方法分析
Jun 25 Python
python实现在函数图像上添加文字和标注的方法
Jul 08 Python
简单了解python中的f.b.u.r函数
Nov 02 Python
利用python实现逐步回归
Feb 24 Python
pandas分批读取大数据集教程
Jun 06 Python
浅谈python锁与死锁问题
Aug 14 Python
详解Pytorch显存动态分配规律探索
Nov 17 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
全国FM电台频率大全 - 12 安徽省
2020/03/11 无线电
国外比较好的几个的Php开源建站平台小结
2010/04/22 PHP
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
2017/05/23 PHP
返回页面顶部top按钮通过锚点实现(自写)
2013/08/30 Javascript
window resize和scroll事件的基本优化思路
2014/04/29 Javascript
jQuery中detach()方法用法实例
2014/12/25 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
2015/10/15 Javascript
Bootstrap每天必学之按钮(一)
2015/11/24 Javascript
深入分析jQuery的ready函数是如何工作的(工作原理)
2015/12/17 Javascript
JS验证逗号隔开可以是中文字母数字
2016/04/22 Javascript
Three.js学习之Lamber材质和Phong材质
2016/08/04 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
JavaScript与java语言有什么不同
2016/09/22 Javascript
使用Vue.js创建一个时间跟踪的单页应用
2016/11/28 Javascript
如何用JS/HTML将时间戳转换为“xx天前”的形式
2017/02/06 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
2017/07/22 jQuery
JavaScript生成随机验证码代码实例
2019/09/28 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
uniapp微信小程序:key失效的解决方法
2021/01/20 Javascript
Selenium 模拟浏览器动态加载页面的实现方法
2018/05/16 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
python通过opencv实现图片裁剪原理解析
2020/01/19 Python
python判断一个变量是否已经设置的方法
2020/08/13 Python
HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览
2012/12/13 HTML / CSS
台湾演唱会订票网站:StubHub台湾
2019/06/11 全球购物
美国名表在线商城:Ashford(支持中文)
2019/09/24 全球购物
What is view? why do we have view?
2012/06/22 面试题
大二学期个人自我评价
2014/01/13 职场文书
护理专业优质毕业生自荐书
2014/01/31 职场文书
先进集体获奖感言
2014/02/13 职场文书
鉴定评语大全
2014/05/05 职场文书
2014年党员整改措施范文
2014/09/21 职场文书
党员违纪检讨书怎么写
2014/11/01 职场文书
物业管理交接协议书
2016/03/24 职场文书