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编写分析Python程序性能的工具的教程
Apr 01 Python
Python抓取电影天堂电影信息的代码
Apr 07 Python
Python numpy实现二维数组和一维数组拼接的方法
Jun 05 Python
Python开发的十个小贴士和技巧及长常犯错误
Sep 27 Python
python使用numpy读取、保存txt数据的实例
Oct 14 Python
PyCharm鼠标右键不显示Run unittest的解决方法
Nov 30 Python
安装docker-compose的两种最简方法
Jul 30 Python
python pillow模块使用方法详解
Aug 30 Python
Python函数中的可变长参数详解
Sep 12 Python
使用python绘制二维图形示例
Nov 22 Python
Python使用socketServer包搭建简易服务器过程详解
Jun 12 Python
用python对excel查重
Dec 07 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新手上路(四)
2006/10/09 PHP
用PHP实现递归循环每一个目录
2010/08/08 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
php使用curl简单抓取远程url的方法
2015/03/13 PHP
初识PHP中的Swoole
2016/04/05 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
jquery制作搜狐快站页面效果示例分享
2014/02/21 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
javascript图片延迟加载实现方法及思路
2015/12/31 Javascript
javascript学习指南之回调问题
2016/04/23 Javascript
基于Bootstrap实现图片轮播效果
2016/05/22 Javascript
基本DOM节点操作
2017/01/17 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
Vue中全局变量的定义和使用
2019/06/05 Javascript
vue+elementUI动态生成面包屑导航教程
2019/11/04 Javascript
Nest.js环境变量配置与序列化详解
2021/02/21 Javascript
python实现二维码扫码自动登录淘宝
2016/12/27 Python
python爬取拉勾网职位数据的方法
2018/01/24 Python
python3之模块psutil系统性能信息使用
2018/05/30 Python
python+splinter实现12306网站刷票并自动购票流程
2018/09/25 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
python3爬虫中引用Queue的实例讲解
2020/11/24 Python
网络工程师面试(三木通信技术有限公司)
2013/06/05 面试题
大三预备党员入党思想汇报
2014/01/08 职场文书
公司年会演讲稿范文
2014/01/11 职场文书
机电一体化专业毕业生自荐信
2014/06/19 职场文书
个人向公司借款协议书
2014/10/09 职场文书
党支部半年考察意见
2015/06/01 职场文书
婚宴祝酒词大全
2015/08/10 职场文书
2016春季幼儿园小班开学寄语
2015/12/03 职场文书
企业管理制度设计时要注意的几种“常见病”!
2019/04/19 职场文书
一定要知道的 25 个 Vue 技巧
2021/11/02 Vue.js
纯 CSS 自定义多行省略的问题(从原理到实现)
2021/11/11 HTML / CSS