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的Django框架使用入门指引
Apr 15 Python
Python中datetime常用时间处理方法
Jun 15 Python
总结python实现父类调用两种方法的不同
Jan 15 Python
python+matplotlib绘制3D条形图实例代码
Jan 17 Python
详解python爬虫系列之初识爬虫
Apr 06 Python
使用python实现ftp的文件读写方法
Jul 02 Python
使用pyqt 实现重复打开多个相同界面
Dec 13 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
Jan 03 Python
pycharm快捷键汇总
Feb 14 Python
python操作redis数据库的三种方法
Sep 10 Python
python 监控服务器是否有人远程登录(详细思路+代码)
Dec 18 Python
Python实现粒子群算法的示例
Feb 14 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实现简单的新闻发布系统实例
2015/07/28 PHP
PHP中in_array函数使用的问题与解决办法
2016/09/11 PHP
PHP自动生成缩略图函数的源码示例
2019/03/18 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
服务器安全设置的几个注册表设置
2007/07/28 Javascript
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
深入document.write()与HTML4.01的非成对标签的详解
2013/05/08 Javascript
js创建对象的方法汇总
2016/01/07 Javascript
使用jQuery或者原生js实现鼠标滚动加载页面新数据
2016/03/06 Javascript
Easyui Treegrid改变默认图标的方法
2016/04/29 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
jQuery实现简单弹窗遮罩效果
2017/02/27 Javascript
NodeJS实现图片上传代码(Express)
2017/06/30 NodeJs
解决小程序无法触发SESSION问题
2020/02/03 Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
2020/07/20 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
从零学python系列之教你如何根据图片生成字符画
2014/05/23 Python
Python的Flask框架的简介和安装方法
2015/11/13 Python
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
numpy使用fromstring创建矩阵的实例
2018/06/15 Python
Python实现通过继承覆盖方法示例
2018/07/02 Python
python-django中的APPEND_SLASH实现方法
2019/06/21 Python
python2和python3实现在图片上加汉字的方法
2019/08/22 Python
python中tkinter窗口位置\坐标\大小等实现示例
2020/07/09 Python
Python生成pdf目录书签的实例方法
2020/10/29 Python
selenium学习教程之定位以及切换frame(iframe)
2021/01/04 Python
HTML5 canvas画矩形时出现边框样式不一致的解决方法
2013/10/14 HTML / CSS
英国健康和美容技术产品购物网站:CurrentBody
2019/07/17 全球购物
优秀毕业生自荐信范文
2014/01/01 职场文书
劳动模范事迹材料
2014/01/19 职场文书
教师个人年度总结
2015/02/11 职场文书
城镇居民医疗保险工作总结
2015/08/10 职场文书
会议开幕致辞怎么写
2016/03/03 职场文书