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使用rabbitmq实现网络爬虫示例
Feb 20 Python
python字典多键值及重复键值的使用方法(详解)
Oct 31 Python
python实现二维码扫码自动登录淘宝
Dec 27 Python
python获取文件路径、文件名、后缀名的实例
Apr 23 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
Aug 03 Python
python3 拼接字符串的7种方法
Sep 12 Python
使用python实现语音文件的特征提取方法
Jan 09 Python
python自定义时钟类、定时任务类
Feb 22 Python
python装饰器代替set get方法实例
Dec 19 Python
Python getattr()函数使用方法代码实例
Aug 10 Python
python实现在列表中查找某个元素的下标示例
Nov 16 Python
如何用python反转图片,视频
Apr 24 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中使用php5-ffmpeg撷取视频图片实例
2015/01/07 PHP
PHP结合Ueditor并修改图片上传路径
2016/10/16 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
2017/09/04 PHP
ThinkPHP5框架实现简单的批量查询功能示例
2018/06/07 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/03 Javascript
JQuery实现倒计时按钮具体方法
2013/11/14 Javascript
js获取对象为null的解决方法
2013/11/21 Javascript
jQuery和AngularJS的区别浅析
2015/01/29 Javascript
jquery实现标签上移、下移、置顶
2015/04/26 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
JS实现按钮颜色切换效果
2020/09/05 Javascript
ReactNative之FlatList的具体使用方法
2017/11/29 Javascript
vue组件发布到npm简单步骤
2017/11/30 Javascript
Vue中的无限加载vue-infinite-loading的方法
2018/04/08 Javascript
详解vue中axios的封装
2018/07/18 Javascript
nuxt.js中间件实现拦截权限判断的方法
2018/11/21 Javascript
在Vue项目中使用snapshot测试的具体使用
2019/04/16 Javascript
[49:21]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第二场 11.05
2020/11/06 DOTA
python切换hosts文件代码示例
2013/12/31 Python
Python通过websocket与js客户端通信示例分析
2014/06/25 Python
Python利用BeautifulSoup解析Html的方法示例
2017/07/30 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
python os模块常用的29种方法使用详解
2020/06/02 Python
通过css3的filter滤镜改变png图片的颜色的示例代码
2020/05/06 HTML / CSS
html5嵌入内容_动力节点Java学院整理
2017/07/07 HTML / CSS
使用html5+css3来实现slider切换效果告别javascript+css
2013/01/08 HTML / CSS
美国著名珠宝品牌之一:Jared The Galleria Of Jewelry
2016/10/01 全球购物
巴西最大的运动品牌:Olympikus
2020/07/14 全球购物
JDO的含义
2012/11/17 面试题
怎样写好自荐信和推荐信
2013/12/26 职场文书
开办饭店创业计划书
2013/12/28 职场文书
村党支部书记承诺书
2014/05/29 职场文书
自我检讨书范文
2015/01/28 职场文书
php 文件上传至OSS及删除远程阿里云OSS文件
2021/07/04 PHP