2016-08-02 318 views
5

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

有没有听说过配合? – sascha

+1

低训练损失应该意味着低训练集错误。你的损失有多低?你的比例是在数百万,从图表 –

+0

的训练损失是低的(不到1)是的我有听说过度适合,但我是在假设,如果你过度拟合,你仍然会有高精度在你的训练数据。对于规模感到抱歉,我完成培训后,我的损失在1-10之间。 –

回答

4

这是因为损失精度是两个完全不同的东西(当然至少在逻辑上)!

考虑,你必须定义loss为例:

loss = (1-accuracy) 

在这种情况下,当您尝试自动最小化lossaccuracy增加。

现在考虑另一个例子中,可以定义loss为:

loss = average(prediction_probabilities) 

虽然它没有任何意义,它在技术上仍是一个有效的损失函数和你weights仍然为了尽量减少这种loss调整。

但是正如你所看到的,在这种情况下,lossaccuracy之间没有关系,所以你不能同时期望两者都增加/减少。

注意:Loss将始终最小化(因此您的loss在每次迭代后会减少)! PS:请用您尝试最小化的loss函数更新您的问题。请使用loss函数更新您的问题。

+2

OP已经评论说,他们在softmax输出上使用了多类别记录。 –

+0

@Sangram嘿!我想知道,如果'loss = average(prediction_probabilities)'被最小化,那意味着我的'prediction_probabilities'已经越来越接近实际情况了,这不会让我的精确度更好吗? – deeplearning

+0

不是真的!如果尝试最小化**损失=平均值(prediction_probabilities)**,将调整权重以使网络输出趋于零,这与准确性无关。如果网络对特定类别(比如说正类)输出完全为零的预测概率,那么准确性就是该类别的普遍性。 – Sangram

1

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

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

+0

我目前正在学习一项新的在线培训,并对我们为什么需要使用softmax_cross_entropy_with_logits()有一个新的理解。原因很简单:softmax交叉熵函数是一个凸函数,但大多数其他函数不是。所以我们可以通过在凸函数中找到局部最小值来找到全局最小值。但是对于非凸函数,例如损失=(1-精度),它有多个局部最小值,因此使用我们的反向传播算法找到合适的W&B值是不可能的。 –

相关问题