scope 命名方法
scope能让你命名变量的时候轻松很多,一下讨论TensorFlow中的两种定义scope的方式。
tf.name_scope()
在TensorFlow当中有两种途径生成变量variable,一种是tf.get_variable(),另一种是tf.variable()。如果在tf.name_scope()的框架下使用这两种方式,结果会如下所示:
可以看出使用 tf.Variable()
定义的时候, 虽然 name
都一样, 但是为了不重复变量名, Tensorflow 输出的变量名并不是一样的. 所以, 本质上 var2
, var21
, var22
并不是一样的变量. 而另一方面, 使用tf.get_variable()
定义的变量不会被tf.name_scope()
当中的名字所影响.
tf.variable_scope()
如果想要达到重复利用变量的效果, 我们就要使用 tf.variable_scope()
, 并搭配 tf.get_variable()
这种方式产生和提取变量. 不像 tf.Variable()
每次都会产生新的变量, tf.get_variable()
如果遇到了同样名字的变量时, 它会单纯的提取这个同样名字的变量(避免产生新变量). 而在重复使用的时候, 一定要在代码中强调 scope.reuse_variables()
, 否则系统将会报错, 以为你只是单纯的不小心重复使用到了一个变量.