tf.variable_scope和tf.name_scope都提供了命名空间管理的功能。这两个函数在大部分情况下是等价的,唯一的区别是在使用tf.get_variable函数时。
简单来说,tf.get_variable函数受tf.variable_scope命名空间影响,不受tf.name_scope命名空间影响。如下面代码所示:
import tensorflow as tf
with tf.variable_scope("a1"):
# 在命名空间a1下获取变量“a1”,于是得到的变量名称为“a1/b1”
c = tf.get_variable("b1", [1])
print(c.name) # 输出:a1/b1:0
with tf.variable_scope("b1"):
# 在命名空间b1下获取变量“b1”,于是得到的变量名称为“b1/b1”
c = tf.get_variable("b1", [1])
print(c.name) # 输出:b1/b1:0
with tf.name_scope("a2"):
# tf.Variable函数生成变量受tf.name_scope影响,于是得到的变量名称为“a2/Variable”
c = tf.Variable([1])
print(c.name) # 输出:a2/Variable:0
# tf.get_variable函数不受tf.name_scope函数的影响,于是得到的变量名称不在命名空间b2中
c = tf.get_variable("b2", [1])
print(c.name) # 输出:b2:0