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生成器实现微线程编程的教程
Apr 13 Python
Python实现将xml导入至excel
Nov 20 Python
Python编程实现控制cmd命令行显示颜色的方法示例
Aug 14 Python
Python中执行存储过程及获取存储过程返回值的方法
Oct 07 Python
python实现本地图片转存并重命名的示例代码
Oct 27 Python
通过shell+python实现企业微信预警
Mar 07 Python
python读取大文件越来越慢的原因与解决
Aug 08 Python
查看jupyter notebook每个单元格运行时间实例
Apr 22 Python
增大python字体的方法步骤
Jul 05 Python
Numpy(Pandas)删除全为零的列的方法
Sep 11 Python
Python Merge函数原理及用法解析
Sep 16 Python
Pandas中DataFrame交换列顺序的方法实现
Dec 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
laravel安装和配置教程
2014/10/29 PHP
thinkphp缓存技术详解
2014/12/09 PHP
php使用类继承解决代码重复的问题
2015/02/11 PHP
深入理解PHP中的Streams工具
2015/07/03 PHP
PHP解决中文乱码
2017/04/28 PHP
PHP实现下载远程图片保存到本地的方法
2017/06/19 PHP
jquery 表单进行客户端验证demo
2009/08/24 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
2015/09/15 Javascript
jQuery序列化表单成对象的简单实现
2016/11/29 Javascript
jquery购物车结算功能实现方法
2020/10/29 Javascript
React Native实现进度条弹框的示例代码
2017/07/17 Javascript
5 种JavaScript编码规范
2018/01/30 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
ES6的Fetch异步请求的实现方法
2018/12/07 Javascript
js实现随机数小游戏
2019/06/28 Javascript
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
浅谈Python 中整型对象的存储问题
2016/05/16 Python
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
Python简单操作sqlite3的方法示例
2017/03/22 Python
Python中摘要算法MD5,SHA1简介及应用实例代码
2018/01/09 Python
python使用多进程的实例详解
2018/09/19 Python
python实现Excel文件转换为TXT文件
2019/04/28 Python
使用Python的Turtle库绘制森林的实例
2019/12/18 Python
python selenium操作cookie的实现
2020/03/18 Python
浅谈Python中的生成器和迭代器
2020/06/19 Python
使用python脚本自动生成K8S-YAML的方法示例
2020/07/12 Python
Python使用正则表达式实现爬虫数据抽取
2020/08/17 Python
pycharm 2020 1.1的安装流程
2020/09/29 Python
你所在的项目是如何确定版本号的
2015/12/28 面试题
营销总监岗位职责范本
2014/02/26 职场文书
2014年个人业务工作总结
2014/11/17 职场文书
2015质检员个人年终工作总结
2015/10/23 职场文书
小学六年级班主任工作经验交流材料
2015/11/02 职场文书
党性修养心得体会2016
2016/01/21 职场文书
Java实战之用Swing实现通讯录管理系统
2021/06/13 Java/Android