scope 命名方法

scope能让你命名变量的时候轻松很多,一下讨论TensorFlow中的两种定义scope的方式。

tf.name_scope()

在TensorFlow当中有两种途径生成变量variable,一种是tf.get_variable(),另一种是tf.variable()。如果在tf.name_scope()的框架下使用这两种方式,结果会如下所示:

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(), 否则系统将会报错, 以为你只是单纯的不小心重复使用到了一个变量.

scope 命名方法