上一篇我介绍了Tensorflow中张量的静态和动态特性。这一篇我会说一说如何使用Scope来管理Tensorflow中的变量和张量。
Tensorflow中有两个不同的上下文管理器来管理张量和变量的名称。第一个是tf.name_scope,第二个是tf.get_variable。下面我结合一些例子来详细的讲解一下。
1、使用tf.name_scope
Tensorflow中的变量和张量是有名称属性的,用于在符号图中标识它们。我们如果在创建变量或张量时没有指定名称属性,Tensorflow会自动指定一个名称。
我们可以通过指定显式名称来覆盖默认名称。
现在我们看一下使用tf.name_scope来管理变量和张量的情况。
注意:在Tensorflow中定义新变量有两种方法:创建tf.Variable对象或调用tf.get_variable。用一个新名称调用tf.get_variable会创建一个新变量,但是如果存在相同名称的变量时,这会引发ValueError异常,这也就是告诉我们不允许重新声明相同名称的变量。
从上述代码,我们可以看到tf.name_scope会影响由tf.Variable创建变量名称,但不会影响由tf.get_variable创建变量名称。
2、使用tf.variable_scope
不同于tf.name_scope,tf.variable_scope是会修改由tf.get_variable创建变量的名称的。
当重复利用先前声明的变量时,会出现不允许错误。
但是有时候我们真的想重用一个先前声明的变量,这该怎么办呢?tf.variable_scope提供了这样做的功能,通过设置reuse标志位为True就可以了。
使用tf.name_scope和tf.variable_scope来管理Tensorflow变量和张量的益处我就不多说了,大家在实际项目中好好体会吧。