tensorflow variable scope 变量命名空间和变量共享
import tensorflow as tf
def f():
var = tf.Variable(initial_value=tf.random_normal(shape=[2]))
return var
a1=f()
a2=f()
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(a1))
print(sess.run(a2))
输出为:
[-0.74532765 -1.91889453]
[ 0.35587442 0.8001433 ]
可以看到两次调用实际上是生成了两组变量。
在需要共享之前变量的时候可以使用get_variable()和 variable_scope() 来管理变量名和作用域。
def f1():
var = tf.get_variable(name="var_name",shape=[2],initializer=tf.random_normal_initializer())
return var
a1=f1()
a2=f1()
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(a1))
print(sess.run(a2))
#ValueError: Variable var_name already exists, disallowed.
运行上面代码会抛出ValueError: Variable var_name already exists错误,这是因为get_variable()会检查是否有其他变量使用这个全称.在这里a1赋值的时候var_name已经被使用了。
使用variable_scope()可以解决这个问题:
方法1:
with tf.variable_scope('f_scope') as scope:
a1=f1()
scope.reuse_variables()
a2=f1()
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(a1))
print(sess.run(a2))
方法2:
with tf.variable_scope("f_scope1") :
a1=f1()
with tf.variable_scope("f_scope1", reuse = True):
a2=f1()
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(a1))
print(sess.run(a2))
输出为:
[ 1.16212559 -0.6709134 ]
[ 1.16212559 -0.6709134 ]
可以看到两次调用使用同样的变量
要注意的是:variable_scope()的reuse 参数是不可继承。当打开一个重用变量作用域,那么所有的子作用域也将会被重用。
tensorflow variable scope 变量命名空间和变量共享的更多相关文章
- tensorflow变量作用域(variable scope)
举例说明 TensorFlow中的变量一般就是模型的参数.当模型复杂的时候共享变量会无比复杂. 官网给了一个case,当创建两层卷积的过滤器时,每输入一次图片就会创建一次过滤器对应的变量,但是我们希望 ...
- Python中变量的作用域(variable scope)
http://www.crifan.com/summary_python_variable_effective_scope/ 解释python中变量的作用域 示例: 1.代码版 #!/usr/bin/ ...
- Tesnsorflow命名空间与变量管理参数reuse
一.TensorFlow中变量管理reuse参数的使用 1.TensorFlow用于变量管理的函数主要有两个: (1)tf.get_variable:用于创建或获取变量的值 (2)tf.varia ...
- [翻译] Tensorflow中name scope和variable scope的区别是什么
翻译自:https://stackoverflow.com/questions/35919020/whats-the-difference-of-name-scope-and-a-variable-s ...
- 含有分类变量(categorical variable)的逻辑回归(logistic regression)中虚拟变量(哑变量,dummy variable)的理解
版权声明:本文为博主原创文章,博客地址:,欢迎大家相互转载交流. 使用R语言做逻辑回归的时候,当自变量中有分类变量(大于两个)的时候,对于回归模型的结果有一点困惑,搜索相关知识发现不少人也有相同的疑问 ...
- [TensorBoard] Name & Variable scope
TF有两个scope, 一个是name_scope一个是variable_scope 第一个程序: with tf.name_scope("hello") as name_scop ...
- javascript中的变量作用域以及变量提升
在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解. 变量作用域 “一个变量的作用域表示这个变量存在的上 ...
- javascript中的变量作用域以及变量提升详细介绍
在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解变量作用域 “一个变量的作用域表示这个变量存在的上下文 ...
- Java中静态变量与实例变量
知识回顾 上一篇总结了java中成员变量和局部变量的区别,这一篇将总结静态变量和实例变量的一些特性和区别. 示例代码 package Variable; public class VariableDe ...
随机推荐
- Python保存时提示“SyntaxError: Non-ASCII character '\xe8' in file”
原因 Python 默认的是ASCII 编码方式,如果出现中文会出现问题,所哟必须在代码的第二行或第一行 显示的声明编码方式(已注释的方式,即"#"开始) 解决方法 在文件头部加上 ...
- EFCore Database-first深入研究
EFCore Database-first深入研究 使用Scaffold-DbContext从数据库生成实体 说明文档: 关于 Scaffold-DbContext 微软有官方说明文档 https:/ ...
- 【DPDK】【CPU usage】DPDK应用如何计算当前系统的压力
[前言] 使用DPDK开发的朋友应该都了解使用dpdk的fwd线程的工作模式是polling模式,即100%轮询的方式去加速网络IO,这样我们在操作系统层面上来观察目标processer会发现usag ...
- Spring--1.了解Spring
1.框架:半成品软件: 高度抽取可重用代码的一种设计:高度的通用性:事务控制,强大的servlet,项目中的一些工具... 多个可重用模块的集合,形成一个某个领域的整体解决方案: 2.Spring: ...
- vs删除空白行 注释
在vs编辑器中有时需要批量删除无用的空白行,为此,可以使用vs编辑器的查找替换功能: 1. Ctrl+H,打开替换功能框. 2.选择“使用正则表达式”,“当前文档”. 3.在查找框中输入: (?< ...
- 【Spring Boot 源码解读】之 【为何引入了 Jedis 依赖最后用的还是 Lettuce 客户端?】
1.Spring Boot 2.x 的两种 Redis 客户端 首先,我们都知道,从 Spring Boot 2.x 开始 Lettuce 已取代 Jedis 成为首选 Redis 的客户端.当然 S ...
- 解决a 标签 和 div 标签高度超出的问题
当a,或div标签里面有内容时,有时候a 或div的高度会超出,此时可以设置a或div的font-size:0:
- ElEmentUI选择器弹出框定位错乱问题解决(弹出框出现在左上角)
这个是原问题,我之前是没问题的,后来的突然出现了这个问题,查了好多没找到,后来看文档才发现的.通过这个问题,说明看文档的重要性,嘻嘻 解决办法是在选择器里插入一个 :popper-append-to- ...
- Client API Object Model - Grid Context(3.3)
Grids 网格,以表格的形式显示数据, 网格可以跨越整个form,也可以是form中的一项. 被称为子网格(subgrid). grid有两种, 一种是read-only grid, 另一种是edi ...
- Windows版Redis主从配置
一.下载 从github上下载Redis的zip包,地址:https://github.com/MicrosoftArchive/redis/releases Redis本身不支持windows,这是 ...