tensorflow中命名空间、变量命名的问题
1.简介
对比分析tf.Variable / tf.get_variable | tf.name_scope / tf.variable_scope的异同
2.说明
- tf.Variable创建变量;tf.get_variable创建与获取变量
- tf.Variable自动检测命名冲突并且处理;tf.get_variable在没有设置reuse时会报错
- tf.name_scope没有reuse功能,tf.get_variable在变量冲突时报错;tf.variable_scope有reuse功能,可配合tf.get_variable实现变量共享
- tf.get_variable变量命名不受tf.name_scope的影响;tf.Variable受两者的影响
3.代码示例
3.1 tf.Variable
tf.Variable在命名冲突时自动处理冲突问题
import tensorflow as tf
a1 = tf.Variable(tf.constant(1.0, shape=[1]),name="a")
a2 = tf.Variable(tf.constant(1.0, shape=[1]),name="a")
print(a1)
print(a2)
print(a1==a2) ###
10 <tf.Variable 'a:0' shape=(1,) dtype=float32_ref>
11 <tf.Variable 'a_1:0' shape=(1,) dtype=float32_ref>
12 False
3.2 tf.get_variable
tf.get_variable在没有设置命名空间reuse的情况下变量命名冲突时报错
import tensorflow as tf
a3 = tf.get_variable("a", shape=[1], initializer=tf.constant_initializer(1.0))
a4 = tf.get_variable("a", shape=[1], initializer=tf.constant_initializer(1.0)) ###
7 ValueError: Variable a already exists, disallowed.
8 Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope?
3.3 tf.name_scope
tf.name_scope没有reuse功能,tf.get_variable命名不受它影响,并且命名冲突时报错;tf.Variable命名受它影响
import tensorflow as tf
a = tf.Variable(tf.constant(1.0, shape=[1]),name="a")
with tf.name_scope('layer2'):
a1 = tf.Variable(tf.constant(1.0, shape=[1]),name="a")
a2 = tf.Variable(tf.constant(1.0, shape=[1]),name="a")
a3 = tf.get_variable("a", shape=[1], initializer=tf.constant_initializer(1.0))
7 # a4 = tf.get_variable("a", shape=[1], initializer=tf.constant_initializer(1.0)) 该句会报错
print(a)
print(a1)
print(a2)
print(a3)
print(a1==a2) ###
16 <tf.Variable 'a:0' shape=(1,) dtype=float32_ref>
17 <tf.Variable 'layer2/a:0' shape=(1,) dtype=float32_ref>
18 <tf.Variable 'layer2/a_1:0' shape=(1,) dtype=float32_ref>
19 <tf.Variable 'a_1:0' shape=(1,) dtype=float32_ref>
20 False
3.4 tf.variable_scope
tf.variable_scope可以配tf.get_variable实现变量共享;reuse默认为None,有False/True/tf.AUTO_REUSE可选:
- 设置reuse = None/False时tf.get_variable创建新变量,变量存在则报错
- 设置reuse = True时tf.get_variable只讲获取已存在的变量,变量不存在时报错
- 设置reuse = tf.AUTO_REUSE时tf.get_variable在变量已存在则自动复用,不存在则创建
import tensorflow as tf
with tf.variable_scope('layer1',reuse=tf.AUTO_REUSE):
a1 = tf.Variable(tf.constant(1.0, shape=[1]),name="a")
a2 = tf.Variable(tf.constant(1.0, shape=[1]),name="a")
a3 = tf.get_variable("a", shape=[1], initializer=tf.constant_initializer(1.0))
a4 = tf.get_variable("a", shape=[1], initializer=tf.constant_initializer(1.0))
print(a1)
print(a2)
print(a1==a2)
print(a3)
print(a4)
print(a3==a4) ###
16 <tf.Variable 'layer1_1/a:0' shape=(1,) dtype=float32_ref>
17 <tf.Variable 'layer1_1/a_1:0' shape=(1,) dtype=float32_ref>
18 False
19 <tf.Variable 'layer1/a_2:0' shape=(1,) dtype=float32_ref>
20 <tf.Variable 'layer1/a_2:0' shape=(1,) dtype=float32_ref>
21 True
!!!
tensorflow中命名空间、变量命名的问题的更多相关文章
- TensorFlow中的变量命名以及命名空间.
What: 在Tensorflow中, 为了区别不同的变量(例如TensorBoard显示中), 会需要命名空间对不同的变量进行命名. 其中常用的两个函数为: tf.variable_scope, t ...
- 83、Tensorflow中的变量管理
''' Created on Apr 21, 2017 @author: P0079482 ''' #如何通过tf.variable_scope函数来控制tf.ger_variable函数获取已经创建 ...
- TensorFlow中的变量和常量
1.TensorFlow中的变量和常量介绍 TensorFlow中的变量: import tensorflow as tf state = tf.Variable(0,name='counter') ...
- 2、Tensorflow中的变量
2.Tensorflow中的变量注意:tf中使用 变量必须先初始化下面是一个使用变量的TF代码(含注释): # __author__ = "WSX" import tensorfl ...
- JavaScript 中的变量命名方法
三种命名方法 在程序语言中,通常使用的变量命名方法有三种:骆驼命名法(CamelCase),帕斯卡命名法(PascalCase)和匈牙利命名法. 依靠单词的大小写拼写复合词的做法,叫做"骆驼 ...
- 深度学习原理与框架-Tensorflow基本操作-Tensorflow中的变量
1.tf.Variable([[1, 2]]) # 创建一个变量 参数说明:[[1, 2]] 表示输入的数据,为一行二列的数据 2.tf.global_variables_initializer() ...
- Tensorflow中的变量
从初识tf开始,变量这个名词就一直都很重要,因为深度模型往往所要获得的就是通过参数和函数对某一或某些具体事物的抽象表达.而那些未知的数据需要通过学习而获得,在学习的过程中它们不断变化着,最终收敛达到较 ...
- tensorflow中使用变量作用域及tf.variable(),tf,getvariable()与tf.variable_scope()的用法
一 .tf.variable() 在模型中每次调用都会重建变量,使其存储相同变量而消耗内存,如: def repeat_value(): weight=tf.variable(tf.random_no ...
- tensorflow中常量(constant)、变量(Variable)、占位符(placeholder)和张量类型转换reshape()
常量 constant tf.constant()函数定义: def constant(value, dtype=None, shape=None, name="Const", v ...
随机推荐
- Objective-C语法之代码块(block)的使用 (转载)
代码块本质上是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值. 脱字符(^)是块的语法标记.按照我们熟悉的参数语法规约所定 ...
- BMC ipmitool 对linux服务器进行IPMI管理
IPMI是智能型平台管理接口(Intelligent Platform Management Interface)的缩写,是管理基于 Intel结构的企业系统中所使用的外围设备采用的一种工业标准,该标 ...
- 50.JQ---jQuery 常用小技巧
1. 禁止右键点击 $(document).ready(function(){ $(document).bind("contextmenu",function(e){ return ...
- phpcms首页替换
大图轮播替换 {pc:content action="lists" catid="13" order="id DESC" num=" ...
- Eclipse 在启动发生错误异常:An internal error occurred during: "Initializing Java Tooling". java.lang.NullPointerException的解决办法
异常现象: 打开Eclipse,出现 An internal error occurred during: "Initializing Java Tooling". java.la ...
- nginx配置详细解析
转自 http://blog.csdn.net/zhongguozhichuang/article/details/528168871.静态HTTP服务器 首先,Nginx是一个HTTP服务器,可以将 ...
- Python- 解决PIP下载安装速度慢
让PIP源使用国内镜像,提升下载速度和安装成功率. 国外的源下载速度太慢,而且经常出现下载后安装出错问题.把PIP安装源替换成国内镜像,可以大幅提升下载速度,还可以提高安装成功率. 国内源: 新版ub ...
- skywalking学习之路---skywalking环境从零搭建部署
介绍 SkyWalking项目是由华为大牛吴晟开源的个人项目,目前已经加入Apache孵化器.SkyWalking项目的核心目标是针对微服务.Cloud Native.容器化架构提供应用性能监控和分布 ...
- java之高效操作文件
代码: import java.io.IOException; import java.nio.file.FileVisitOption; import java.nio.file.FileVisit ...
- 微信小程序一些demo链接地址
校园小情书小程序前端+后端源码 https://www.douban.com/group/topic/116974400/ 小程序源码疯狂猜成语小程序源码UI美观 https://www.douban ...