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

2024-04-29 15:46:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我是机器学习的新手,目前正在尝试训练一个具有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))

Tags: 图像机器tftensorflow地方神经网络卷积趋势
2条回答

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

我们在CNN中使用了softmax交叉熵,因为它对神经网络训练是有效的。如果我们使用loss=(1-准确度)作为损失函数,用我们目前成熟的回溯训练方案来调整CNN神经网络的权值很难得到更好的结果,我真的做到了,并且证实了这个结论,你也可以自己尝试。可能是因为我们目前的落后训练方案,可能是因为我们的神经元定义(我们需要把它改成其他类型的神经元?)但是无论如何,目前在损失函数中使用精度并不是神经元网络训练的有效方法,所以正如那些人工智能科学家告诉我们的那样,使用softmax_cross_entropy_with_logits(),他们已经证实了这种方法是有效的,对于其他方法,我们还不知道。

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

考虑一个例子,其中您将loss定义为:

loss = (1-accuracy)

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

现在考虑另一个例子,在这里您将loss定义为:

loss = average(prediction_probabilities)

尽管这没有任何意义,但从技术上讲,它仍然是一个有效的损失函数,并且您的weights仍在进行调整,以便将这种loss最小化。

但正如您所见,在本例中,lossaccuracy之间没有关系,因此您不能期望两者同时增加/减少。

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

注:请用试图最小化的loss函数更新您的问题。

相关问题 更多 >