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 29 Python
老生常谈进程线程协程那些事儿
Jul 24 Python
使用pandas的DataFrame的plot方法绘制图像的实例
May 24 Python
python一行sql太长折成多行并且有多个参数的方法
Jul 19 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
Aug 08 Python
使用Python制作一个打字训练小工具
Oct 01 Python
python实现把二维列表变为一维列表的方法分析
Oct 08 Python
使用python实现回文数的四种方法小结
Nov 24 Python
python读取tif图片时保留其16bit的编码格式实例
Jan 13 Python
基于pytorch中的Sequential用法说明
Jun 24 Python
Python绘制组合图的示例
Sep 18 Python
Pandas中两个dataframe的交集和差集的示例代码
Dec 13 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在Web开发领域的优势
2006/10/09 PHP
php strtotime 函数UNIX时间戳
2009/01/14 PHP
php入门教程 精简版
2009/12/13 PHP
php统计文章排行示例
2014/03/04 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
php格式文件打开的四种方法
2018/02/24 PHP
PHP快速排序算法实现的原理及代码详解
2019/04/03 PHP
javascript中的作用域和上下文使用简要概述
2013/12/05 Javascript
我的Node.js学习之路(二)NPM模块管理
2014/07/06 Javascript
javascript操作符"!~"详解
2015/02/10 Javascript
nodejs实现获取某宝商品分类
2015/05/28 NodeJs
浅谈String.valueOf()方法的使用
2016/06/06 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
js实现二级导航功能
2017/03/03 Javascript
JS将unicode码转中文方法
2017/05/08 Javascript
详解Angular之constructor和ngOnInit差异及适用场景
2017/06/22 Javascript
vue2.0 实现页面导航提示引导的方法
2018/03/13 Javascript
Vue2.0实现调用摄像头进行拍照功能 exif.js实现图片上传功能
2018/04/28 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
快速解决element的autofocus失效问题
2020/09/08 Javascript
js实现圆形菜单选择器
2020/12/03 Javascript
Python编程之string相关操作实例详解
2017/07/22 Python
Numpy中转置transpose、T和swapaxes的实例讲解
2018/04/17 Python
python实现简单flappy bird
2018/12/24 Python
python中property属性的介绍及其应用详解
2019/08/29 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
2020/06/10 Python
Wiggle中国:英国骑行、跑步、游泳 & 铁三运动装备专卖网店
2016/08/02 全球购物
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
Carmen Sol官网:购买果冻鞋、手袋和配件
2021/01/01 全球购物
乌克兰巴士票购买网站:inBus
2021/03/12 全球购物
女大学生自我鉴定
2013/12/09 职场文书
讲文明树新风演讲稿
2014/05/12 职场文书
学校运动会广播稿100条
2014/09/14 职场文书
消夏晚会主持词
2015/06/30 职场文书
使用python求解迷宫问题的三种实现方法
2022/03/17 Python