为什么在卷积神经网络中可能具有低损耗,但精度也很低?

时间:2016-08-02 19:25:17

标签: python machine-learning tensorflow deep-learning

我是机器学习的新手,目前我正在尝试用3个卷积层和1个完全连接的层来训练卷积神经网络。我使用的辍学概率为25%,学习率为0.0001。我有6000个150x200培训图像和13个输出类。我正在使用tensorflow。我注意到一个趋势,我的损失稳步下降,但我的准确性只是略有增加,然后再次下降。我的训练图像是蓝色线条,我的验证图像是橙色线条。 x轴是步骤。 enter image description here

我想知道是否有一些我不理解的东西或可能导致这种现象的原因是什么?从我读过的材料中,我认为低损耗意味着高精度。  这是我的损失函数。

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y))

2 个答案:

答案 0 :(得分:5)

这是因为损失准确性是完全不同的两件事(至少在逻辑上是这样)!

考虑一个将loss定义为:

的示例
loss = (1-accuracy)

在这种情况下,当您尝试最小化loss时,accuracy会自动增加。

现在考虑另一个将loss定义为:

的示例
loss = average(prediction_probabilities)

虽然它没有任何意义,但它在技术上仍然是一个有效的损失函数,而您的weights仍在调整,以便最小化loss

但正如您所看到的,在这种情况下,lossaccuracy之间没有任何关系,因此您不能指望两者同时增加/减少。

注意:Loss将始终最小化(因此每次迭代后loss会减少)!

PS:请使用您尝试最小化的loss功能更新您的问题。

答案 1 :(得分:1)

softmax_cross_entropy_with_logits()和准确性是具有不同公式定义的两个不同概念。在正常情况下,我们可以期望通过最小化softmax交叉熵来获得更高的准确度,但是它们以不同的方式计算,因此我们不能期望它们以同步的方式总是增加或减少。

我们在CNN中使用softmax交叉熵,因为它对神经网络训练有效。如果我们使用loss =(1-accuracy)作为损失函数,通过使用我们当前成熟的backprogation训练解决方案调整CNN神经网络的权重很难获得更好的结果,我真的做到了并证实了这个结论,你也可以自己尝试一下。也许它是由我们目前糟糕的逆回训练解决方案引起的,也许是由我们的神经元引起的。定义(我们需要将其更改为其他类型的神经元?),但无论如何,目前,使用损失函数的准确性并不是神经网络训练的有效方法,所以只需使用softmax_cross_entropy_with_logits(),就像AI科学家告诉我们的那样,他们已经证实这种方式是有效的,对于其他方式,我们还不了解它们。