Python 如何将tf.layers变量放入tf.name\u范围/tf.variable\u范围?

Python 如何将tf.layers变量放入tf.name\u范围/tf.variable\u范围?,python,tensorflow,scope,layer,tensorboard,Python,Tensorflow,Scope,Layer,Tensorboard,我对Tensorflow有问题: 以下代码为卷积块生成正确的(ish)图形: def conv_layer(self, inputs, filter_size = 3, num_filters = 256, name = None): scope_name = name if name == None: scope_name = "conv_layer" with tf.name_scope(scope_name):

我对Tensorflow有问题:

以下代码为卷积块生成正确的(ish)图形:

def conv_layer(self, inputs, filter_size = 3, num_filters = 256, name = None):
    scope_name = name
    if name == None:
        scope_name = "conv_layer"

    with tf.name_scope(scope_name):
        conv = tf.contrib.layers.conv2d(inputs, num_filters, filter_size, activation_fn = None)
        batch_norm = tf.contrib.layers.batch_norm(conv)
        act = tf.nn.leaky_relu(batch_norm)

        return act
问题是
tf.layers
API产生了一些丑陋的变量,这些变量实际上不在
name\u范围内。这是张力板视图,你可以看到我的意思


有没有办法让这些变量进入作用域?这是一个大问题,当谈到可视化的图形,因为我计划这个网络要大得多。(如右图所示,这已经是一个大问题,每次启动Tensorboard时,我都必须手动从主图形中删除这些。)
tf.name\u scope
被通过
tf.get\u variable()
创建的变量忽略,该变量通常由
tf.layers
函数使用。这与通过
tf.Variable
创建的变量形成对比

有关差异的解释(尽管有些过时),请参见。

解决方案从问题转移到答案:

name\u scope
的每个实例更改为
variable\u scope
时,问题已被忽略。但是,我必须为每个
变量\u范围
分配一个唯一的ID,并设置
reuse=False

def conv_layer(self, inputs, filter_size = 3, num_filters = 256, name = None):
    scope_name = name
    if name == None:
        scope_name = "conv_layer_" + str(self.conv_id)
        self.conv_id += 1

    with tf.variable_scope(scope_name, reuse = False):
        conv = tf.contrib.layers.conv2d(inputs, num_filters, filter_size, activation_fn = None)
        batch_norm = tf.contrib.layers.batch_norm(conv)
        act = tf.nn.leaky_relu(batch_norm)

        return act
正如您所看到的,变量很好地隐藏在正确的块中


名称\u范围
更改为
变量\u范围
时,我得到以下错误
值错误:变量conv\u层/conv/权重已存在,不允许。您的意思是在VarScope中设置reuse=True还是reuse=tf.AUTO\u reuse?
另外,将
变量范围的
reuse
周长设置为True会产生此错误:
变量conv\u layer/conv/weights不存在,或者不是使用tf.get\u variable()创建的。你的意思是在VarScope中设置reuse=tf.AUTO\u reuse吗?
似乎我已经找到了一个解决办法,给每个
变量\u范围
一个唯一的id。我将对我的帖子进行编辑以显示我的解决方案(更多的是一个解决办法)。因此现在有一个叫做tf.variable\u creator\u scope的东西,没有变量\u范围。