好吧,我最近一直在和Tensorflow打交道,并开始使用更高级的Layers API。但这给我带来了一个问题。在
以下代码为卷积块生成正确的(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.层API生成一些丑陋的变量,这些变量实际上并不在name_范围内。这是张量板视图,这样你就能明白我的意思了。在
有没有办法让这些变量进入作用域?这是一个很大的问题,当谈到可视化的图形,因为我计划这个网络更大。(如右图所示,这已经是一个大问题,每次启动Tensorboard时,我都必须手动从主图形中删除这些内容。)
提前感谢:)
编辑-解决方案/解决方案
用variable_scope
更改name_scope
的每个实例,问题已被忽略。但是,我必须为每个variable_scope
分配一个唯一的ID并设置reuse = False
。在
如您所见,变量被很好地隐藏在正确的块中:)
您可以尝试使用
tf.variable_scope
。tf.name_scope
被通过tf.get_variable()
创建的变量忽略,该变量通常由tf.layers
函数使用。这与通过tf.Variable
创建的变量不同。在请参阅this question以获得对差异的解释(尽管有些过时)。在
相关问题 更多 >
编程相关推荐