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调用shell的方法
Nov 20 Python
python概率计算器实例分析
Mar 25 Python
Python 转义字符详细介绍
Mar 21 Python
Python常见工厂函数用法示例
Mar 21 Python
Python实现的端口扫描功能示例
Apr 08 Python
基于python实现蓝牙通信代码实例
Nov 19 Python
Pytorch maxpool的ceil_mode用法
Feb 18 Python
Pytorch对Himmelblau函数的优化详解
Feb 29 Python
python tkinter之顶层菜单、弹出菜单实例
Mar 04 Python
django之从html页面表单获取输入的数据实例
Mar 16 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
Sep 03 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
Mar 04 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
joomla jce editor 解决上传中文名文件失败问题
2013/06/09 PHP
php写入、删除与复制文件的方法
2015/06/20 PHP
thinkphp实现图片上传功能
2016/01/13 PHP
Yii统计不同类型邮箱数量的方法
2016/10/18 PHP
php简单计算年龄的方法(周岁与虚岁)
2016/12/06 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
学习javascript面向对象 理解javascript对象
2016/01/04 Javascript
深入理解JS实现快速排序和去重
2016/10/17 Javascript
domReady的实现案例
2016/11/23 Javascript
jQuery超简单遮罩层实现方法示例
2018/09/06 jQuery
vue文件运行的方法教学
2019/02/12 Javascript
Vue项目实现换肤功能的一种方案分析
2019/08/28 Javascript
vue+ESLint 配置保存 自动格式化代码
2020/03/17 Javascript
修改Vue打包后的默认文件名操作
2020/08/12 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
在Python中操作列表之List.append()方法的使用
2015/05/20 Python
Python中type的构造函数参数含义说明
2015/06/21 Python
Python处理JSON数据并生成条形图
2016/08/05 Python
Python实现统计给定字符串中重复模式最高子串功能示例
2018/05/16 Python
Python3.6简单反射操作示例
2018/06/14 Python
Python玩转Excel的读写改实例
2019/02/22 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
2019/08/06 Python
Tensorflow:转置函数 transpose的使用详解
2020/02/11 Python
opencv python 对指针仪表读数识别的两种方式
2021/01/14 Python
Snapfish英国:在线照片打印和个性化照片礼品
2017/01/13 全球购物
解释一下ruby中的特殊方法与特殊类
2013/02/26 面试题
自我鉴定四大框架
2014/01/17 职场文书
九年级化学教学反思
2014/01/28 职场文书
党的群众路线剖析材料
2014/10/09 职场文书
关于安全的广播稿
2014/10/23 职场文书
大班下学期个人总结
2015/02/13 职场文书
2015国庆节放假通知范文
2015/07/30 职场文书
公安干警正风肃纪心得体会
2016/01/15 职场文书
Redis中有序集合的内部实现方式的详细介绍
2022/03/16 Redis
使用CSS实现按钮边缘跑马灯动画
2023/05/07 HTML / CSS