共同点
作用域函数 包括:
- 命名域:tf.name_scope()
- 变量域:tf.variable_scope()
对于使用 tf.Variable()
方式创建的变量,具有相同的效果。即:
都会在当前变量名前面,加上“域名称”前缀。
都可用于:
- 变量共享
- tensorboard画流程图进行可视化封装变量
但是,tf.Variable() 每次都会新建变量。
如果希望重用(共享)一些变量,必须用到get_variable(),它会去搜索变量名,有就直接用,没有再新建。
不同点
tf.name_scope
命名域。
tf.variable_scope
变量域。
- 对于通过
tf.get_variable()
方式创建的变量,只有使用variable scope的名称才会加到变量名称前面,而name scope无效。
经验总结
- 对于控制tf.summary、input、loss等tensor的作用域,可以直接用
tf.name_scope()
。 - 对于含有
tf.get_variable()
的作用域(常包括网络设计、valid时网络reuse等):
必须用with tf.variable_scope(tf.get_variable_scope(), reuse=True): ...
tf.variable_scope()
才能给其加上前缀。