在tensorflow中,训练和测试显示出不同的结果

时间:2018-07-16 11:39:20

标签: python tensorflow machine-learning

现在我在张量流中遇到问题: 我有一个由6个卷积层组成的网络(每个卷积都进行批量归一化,最后一个卷积后是平均池,以使输出形状为Nx1x1xC),目的是将一个图像分类。培训期间一切都很好: -训练样本约为150000 -训练期间的验证样本约为12000

我总共训练了50000次迭代,最小批量大小为6。 -在训练过程中,训练损失总是越来越低(从开始时的2.6到迭代50000时的约0.3), -经过约40000次迭代(从开始时的60%到迭代50000次时的72%),验证准确性变得越来越高和饱和

但是,当我在相同的验证样本上使用学习的50000次迭代的权重进行测试时,总体准确性仅为40%左右。我已经用谷歌搜索是否有人遇到过类似的问题。有人说,批量标准化中移动平均线的衰减可能是原因。

tf.contrib.layers.batch_norm中的默认衰减为0.999。然后我训练了0.9、0.99、0.999的衰减。在测试过程中,OA对验证样品的结果为70%,30%,39%。尽管0.9的衰减效果最好,但在训练过程中验证仍低于OA。

我正在写信询问是否有人有类似的问题,您是否知道可能是什么原因?

最良好的祝愿

1 个答案:

答案 0 :(得分:1)

我有两个建议:

  1. 如果您不使用bool isTraining并将其传递给Batch Normalization层,请这样做!这应该是一个占位符,并在每次会话之前设置(在培训中,它将设置为true,在测试/验证中将其设置为false)。
  2. 检查并确认在测试/验证期间您没有拖延tet /验证数据集(在数据的批量导入/管理中可能存在某种shuffle=True)。 第一个是关键,第二个不应有太大的区别,但它每次都能确保确切的数值。