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 ftp上传文件
Feb 13 Python
使用Python编写一个最基础的代码解释器的要点解析
Jul 12 Python
Python 异常处理的实例详解
Sep 11 Python
Python返回数组/List长度的实例
Jun 23 Python
浅谈django rest jwt vue 跨域问题
Oct 26 Python
Pandas操作CSV文件的读写实现方法
Nov 13 Python
使用python从三个角度解决josephus问题的方法
Mar 27 Python
对python pandas中 inplace 参数的理解
Jun 27 Python
python与c语言的语法有哪些不一样的
Sep 13 Python
python如何对链表操作
Oct 10 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
Dec 08 Python
Python中常见的导入方式总结
May 06 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图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
2010/12/02 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
2015/01/04 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
2017/07/27 PHP
Laravel5.5 视图 - 创建视图和数据传递示例
2019/10/21 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
JavaScript处理解析JSON数据过程详解
2015/09/11 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
2015/11/30 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
JS常用算法实现代码
2016/11/14 Javascript
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
2017/01/12 NodeJs
详解react如何在组件中获取路由参数
2017/06/15 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
Linux Centos7.2下安装nodejs&npm配置全局路径的教程
2018/05/15 NodeJs
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
微信小程序实现按字母排列选择城市功能
2019/11/25 Javascript
VuePress 中如何增加用户登录功能
2019/11/29 Javascript
JS图片懒加载技术实现过程解析
2020/07/27 Javascript
Python实现获取网站PR及百度权重
2015/01/21 Python
详细分析python3的reduce函数
2017/12/05 Python
python使用turtle库与random库绘制雪花
2018/06/22 Python
python实现点对点聊天程序
2018/07/28 Python
python中的tcp示例详解
2018/12/09 Python
Python中按键来获取指定的值
2019/03/02 Python
python解释器spython使用及原理解析
2019/08/24 Python
Pytorch之Variable的用法
2019/12/31 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
2020/06/28 Python
Python类成员继承重写的实现
2020/09/16 Python
iframe跨域的几种常用方法
2019/11/11 HTML / CSS
印度购物网站:TATA CLiQ
2017/11/23 全球购物
给面试官的感谢信
2014/02/01 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
导游词之无锡唐城
2019/12/12 职场文书
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python
MySQL 自定义变量的概念及特点
2021/05/13 MySQL
Apache POI的基本使用详解
2021/11/07 Servers