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利用elaphe制作二维条形码实现代码
May 25 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
Feb 01 Python
在Python中pandas.DataFrame重置索引名称的实例
Nov 06 Python
在python中pandas的series合并方法
Nov 12 Python
python批量爬取下载抖音视频
Jun 17 Python
django drf框架自带的路由及最简化的视图
Sep 10 Python
使用tensorboard可视化loss和acc的实例
Jan 21 Python
Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解
Feb 14 Python
如何利用python web框架做文件流下载的实现示例
Jun 02 Python
基于Python词云分析政府工作报告关键词
Jun 02 Python
Django实现翻页的示例代码
May 24 Python
教你怎么用Python实现GIF动图的提取及合成
Jun 15 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 作用域解析运算符(::)
2010/07/27 PHP
php知道与问问的采集插件代码
2010/10/12 PHP
不重新编译PHP为php增加openssl模块的方法
2011/06/14 PHP
php自定义函数实现JS的escape的方法示例
2016/07/07 PHP
PHP的反射机制实例详解
2017/03/29 PHP
php中使用array_filter()函数过滤数组实例讲解
2021/03/03 PHP
JS声明变量背后的编译原理剖析
2012/12/28 Javascript
jquery全选/全不选/反选另一种实现方法(配合原生js)
2013/04/07 Javascript
JavaScript获取FCK编辑器信息的具体方法
2013/07/12 Javascript
jquery设置元素的readonly和disabled的写法
2013/09/22 Javascript
js动态改变select选择变更option的index值示例
2014/07/10 Javascript
js中函数调用的两种常用方法使用介绍
2014/07/17 Javascript
JS按回车键实现登录的方法
2014/08/25 Javascript
jQuery中:submit选择器用法实例
2015/01/03 Javascript
大型JavaScript应用程序架构设计模式
2016/06/29 Javascript
RequireJS简易绘图程序开发
2016/10/28 Javascript
ES6数组的扩展详解
2017/04/25 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
vue mint-ui学习笔记之picker的使用
2017/10/11 Javascript
Vue父子组建的简单通信之控制开关Switch的实现
2018/06/04 Javascript
JS实现仿微信支付弹窗功能
2018/06/25 Javascript
基于JavaScript实现贪吃蛇游戏
2020/03/16 Javascript
[01:59]DOTA2首部纪录片《Free to play》预告片
2014/03/12 DOTA
python基础教程之自定义函数介绍
2014/08/29 Python
Python中的list与tuple集合区别解析
2019/10/12 Python
对Tensorflow中Device实例的生成和管理详解
2020/02/04 Python
HTML5 Web存储方式的localStorage和sessionStorage进行数据本地存储案例应用
2012/12/09 HTML / CSS
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
业务员工作态度散漫检讨书
2014/11/02 职场文书
党支部先进事迹材料
2014/12/24 职场文书
幼儿园中班个人总结
2015/02/28 职场文书
喋血孤城观后感
2015/06/08 职场文书
Java基础之线程锁相关知识总结
2021/06/30 Java/Android
微软Win11什么功能最惊艳? Windows11新功能特性汇总
2021/11/21 数码科技
CI Games宣布《堕落之王2》使用虚幻引擎5制作 预计将于2023年正式发售
2022/04/11 其他游戏
Java死锁的排查
2022/05/11 Java/Android