tf.name_scope&tf.variable scope
来源:互联网 发布:java 将字符串格式化 编辑:程序博客网 时间:2024/05/21 22:38
转载自:http://blog.csdn.net/u012436149/article/details/53081454
在tensorflow中,有两个scope, 一个是name_scope一个是variable_scope,这两个scope到底有什么区别呢?
先看第一个程序:
with tf.name_scope("hello") as name_scope: arr1 = tf.get_variable("arr1", shape=[2,10],dtype=tf.float32) print name_scope print arr1.name print "scope_name:%s " % tf.get_variable_scope().original_name_scope
输出为:
hello/
arr1:0
scope_name:
可以看出:
- tf.name_scope() 返回的是 一个string,”hello/”
- 在name_scope中定义的variable的name并没有 “hello/”前缀
- tf.get_variable_scope()的original_name_scope 是空
第二个程序:
with tf.variable_scope("hello") as variable_scope: arr1 = tf.get_variable("arr1", shape=[2, 10], dtype=tf.float32) print variable_scope print variable_scope.name #打印出变量空间名字 print arr1.name print tf.get_variable_scope().original_name_scope #tf.get_variable_scope() 获取的就是variable_scope with tf.variable_scope("xixi") as v_scope2: print tf.get_variable_scope().original_name_scope #tf.get_variable_scope() 获取的就是v _scope2
输出为:
<tensorflow.python.ops.variable_scope.VariableScope object at 0x7fbc09959210>hellohello/arr1:0hello/hello/xixi/
可以看出:
- tf.variable_scope() 返回的是一个 op对象
- variable_scope中定义的variable 的name加上了”hello/”前缀
- tf.get_variable_scope()的original_name_scope 是 嵌套后的scope name
第三个程序:
with tf.name_scope("name1"): with tf.variable_scope("var1"): w = tf.get_variable("w",shape=[2]) res = tf.add(w,[3])print w.nameprint res.name# 输出var1/w:0name1/var1/Add:0
可以看出:variable scope
和name scope
都会给op
的name
加上前缀
对比三个个程序可以看出:
- name_scope对 get_variable()创建的变量 的名字不会有任何影响,而创建的
op
会被加上前缀. - tf.get_variable_scope() 返回的只是 variable_scope,不管 name_scope.所以以后我们在使用tf.get_variable_scope().reuse_variables() 时可以无视name_scope
其它
with tf.name_scope("scope1") as scope1: with tf.name_scope("scope2") as scope2: print scope2#输出:scope1/scope2/
import tensorflow as tfwith tf.variable_scope("scope1") as scope1: with tf.variable_scope("scope2") as scope2: print scope2.name#输出:scope1/scope2
name_scope可以用来干什么
典型的 TensorFlow 可以有数以千计的节点,如此多而难以一下全部看到,甚至无法使用标准图表工具来展示。为简单起见,我们为op/tensor
名划定范围,并且可视化把该信息用于在图表中的节点上定义一个层级。默认情况下, 只有顶层节点会显示。下面这个例子使用tf.name_scope在hidden命名域下定义了三个操作:
import tensorflow as tfwith tf.name_scope('hidden') as scope: a = tf.constant(5, name='alpha') W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0), name='weights') b = tf.Variable(tf.zeros([1]), name='biases') print a.name print W.name print b.name
结果是得到了下面三个操作名:
hidden/alpha
hidden/weights
hidden/biases
name_scope 是给op_name加前缀, variable_scope是给get_variable()创建的变量的名字加前缀。
tf.variable_scope有时也会处理命名冲突
import tensorflow as tfdef test(name=None): with tf.variable_scope(name, default_name="scope") as scope: w = tf.get_variable("w", shape=[2, 10])test()test()ws = tf.trainable_variables()for w in ws: print(w.name)#scope/w:0#scope_1/w:0#可以看出,如果只是使用default_name这个属性来创建variable_scope#的时候,会处理命名冲突
其它
- tf.name_scope(None) 有清除name scope的作用
import tensorflow as tfwith tf.name_scope("hehe"): w1 = tf.Variable(1.0) with tf.name_scope(None): w2 = tf.Variable(2.0)print(w1.name)print(w2.name)#hehe/Variable:0#Variable:0
variable_scope可以用来干什么
variable_scope 用来管理 variable 详见variable_scope
总结
简单来看
1. 使用tf.Variable()
的时候,tf.name_scope()
和tf.variable_scope()
都会给Variable
和 op
的 name
属性加上前缀。
2. 使用tf.get_variable()
的时候,tf.name_scope()
就不会给 tf.get_variable()
创建出来的Variable
加前缀。
- tf.name_scope&tf.variable scope
- tf.get_variable() vs tf.Variable(),tf.name_scope() vs tf.variable_scope()
- tf.get_variable() vs tf.Variable(),tf.name_scope() vs tf.variable_scope()
- tensorflow variable_scope,tf.name_scope, tf.variable, tf.get_varible
- TensorFlow 学习(一)—— tf.get_variable() vs tf.Variable(),tf.name_scope() vs tf.variable_scope()
- tensorflow的共享变量,tf.Variable(),tf.get_variable(),tf.Variable_scope(),tf.name_scope()联系与区别:
- tensorflow的共享变量,tf.Variable(),tf.get_variable(),tf.Variable_scope(),tf.name_scope()联系与区别
- tensorflow的共享变量,tf.Variable(),tf.get_variable(),tf.Variable_scope(),tf.name_scope()联系与区别
- 彻底弄懂tf.Variable、tf.get_variable、tf.variable_scope以及tf.name_scope异同
- tf.name_scope and tf.variable_scope
- tf.get_variable tf.variable_scope tf.name_scope
- tf.Graph.name_scope
- tf.Variable
- tf.Variable()
- tf.Variable()
- tf.Variable
- tf.variable_scope和tf.name_scope的用法
- tf.variable_scope与tf.name_scope不同之处
- 异常及处理
- 网络中的一些术语
- eclips利用dropins目录安装插件
- maven手动添加jar包到本地仓库
- Java中对一个list进行排序
- tf.name_scope&tf.variable scope
- 【设计模式】--FACADE模式
- TankWar游戏(图片版)----阶段二
- lab1
- 同步和异步的概念
- 分布式系统的数据结构
- Portpolio management
- 196. Delete Duplicate Emails
- Go 语言小记