我使用tensorFlow训练了一个分类网络,并在每个卷积层中进行批量归一化。当我在平衡测试集上预测其中包含的每个类别时,准确性是正常的。 然而,如果我从测试集中选择任何一个特定类别,则准确度很低,甚至为零。 但是当测试集中包含3个类别时,准确性变得更高。众所周知,当模型完成训练时,权重是固定的。但我发现测试集中的平衡对预测准确性有很大影响。 我认为如果批量标准化对此有影响,那么我删除所有批量标准化并再次重新训练模型。这一次,当我只预测一个类别图片时,它变得正常了。 谁知道为什么?谢谢!
答案 0 :(得分:0)
但是,由于您在评论中添加了您正在使用的tf.contrib.layers.conv2d(x, num_output, kernel_size, stride, padding, activation_fn, normal_fn=tf.contrib.layers.batch_norm)
我发现了问题:normalizer_fn
调用您传递的函数(batch_norm)。但它使用默认参数。默认情况下,is_training
等于True
,因此您甚至可以在测试阶段计算批次的均值和方差。请仔细阅读tf.contrib.layers.conv2d
的文档,并使用normalizer_params
在培训时通过is_training=True
,在测试/验证时使用is_training=False
。