tf.Graph.name_scope(name)
返回一个上下文管理器,为操作创建一个层级的name
一个图维持一个name scope的栈。name_scope(...):声明将一个新的name放入context生命周期的一个栈中。
name参数如下:
- 一个字符串(不以'/' 结尾)将穿件一个新scope name,在这个scope中,上下文中所创建的操作前都加上name这个前缀。如果name之前用过,将调用self.unique_name(name) 确定调用一个唯一的name
- 使用g.name_scope(...)捕获之前的scope作为scope:声明将被视为一个“全局”的scope name,这允许重新进入一个已经存在的scope
- None或空字符串将会重置当前的scope name 为最高级(空)的name scope
- #!/user/bin/env python
- # coding=utf-8
-
- import tensorflow as tf
-
- with tf.Graph().as_default() as g:
- c=tf.constant(5.0,name="c")
- assert c.op.name=="c"
- c_1=tf.constant(6.0,name="c")
- assert c_1.op.name=="c_1"
-
- #creates a scop called "nested"
- with g.name_scope("nested") as scope:
- nested_c=tf.constant(10.0,name="c")
- assert nested_c.op.name=="nested/c"
-
- #creates a nested scope called "inner"
- with g.name_scope("inner"):
- nested_inner_c=tf.constant(20.0,name="c")
- assert nested_inner_c.op.name=="nested/inner/c"
-
- #creates a nested scope called "inner_1"
- with g.name_scope("inner"):
- nested_inner_1_c=tf.constant(30.0,name="c")
- assert nested_inner_1_c.op.name=="nested/inner_1/c"
-
- #treats 'scope' as an absolute name scope, and
- #switches to the "nested/" scope.
- with g.name_scope(scope):
- nested_d=tf.constant(40.0,name="d")
- assert nested_d.op.name=="nested/d"
-
- with g.name_scope(""):
- e=tf.constant(50.0,name="e")
- assert e.op.name=="e"
scope自身的name可以被g.name_scope(...)捕获作为一个scope:,把scope name存储到变量scope中。这个值可以用于命名一个操作的最终结果,例如:
- inputs=tf.constant(...)
- with g.name_scope('my_layer') as scope:
- weights=tf.Variable(...,name="weights")
- biases=tf.Variable(...,name="biases")
- affine=tf.matmul(inputs,weights)+biases
- output=tf.nn.relu(affine,name=scope)
|