神经网络 - Softmax 交叉熵损失减少对应于准确性降低

Posted

技术标签:

【中文标题】神经网络 - Softmax 交叉熵损失减少对应于准确性降低【英文标题】:Neural Networks - Softmax Cross Entropy Loss Decrease Corresponds to Accuracy Decrease 【发布时间】:2017-12-24 02:36:04 【问题描述】:

我一直在训练神经网络并使用 Tensorflow。 我的成本函数是:

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=y))

训练我的神经网络已导致交叉熵损失从约 170k 减少到约 50,这是一个显着的改进。同时,我的准确率实际上稍微变差了:从 3% 到 2.9%。这些测试是在训练集上进行的,所以不存在过度拟合的问题。

我简单地计算精度如下:

correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1))
accuracy = tf.reduce_mean(tf.cast(correct, 'float'))
print('Accuracy:', accuracy.eval(x: batch_x, y: batch_y))

这可能是什么原因? 我是否应该将准确率用作成本函数,因为我的情况的交叉熵(softmax)显然有问题。

我知道在 *** 上有一个similar question,但这个问题从未得到完全回答。

【问题讨论】:

您完成了多少次完整运行?你只运行了两次?如果是这样,它可能只是一个糟糕的运行。你有多少输入特征,你的网络有多大?您是否应用 sigmoid 和/或其他激活函数作为网络中的最后一个操作?如果你删除它,因为 tensorflow 会自动应用 softmax。尝试确认其中一些并给我们更新! 我也有同样的问题,你解决了吗?我的损失从高到非常低,但对于 10 类分类,准确率保持在 10% 左右。 好的,就我而言,问题与权重初始化有关。当我开始使用 tf.contrib.layers.fully_connectedxavier 权重初始化时,问题确实消失了。 【参考方案1】:

如果没有看到您的机器学习问题,我无法说出问题的确切原因。 请至少提供问题的类型(二进制、多类和/或多标签)

但是,如此低的准确率以及准确率和损失之间的巨大差异,我认为这是一个错误,而不是机器学习问题。

一个可能的错误可能与加载标签数据y 有关。对于大多数机器学习问题(图像分类除外)来说,3% 的准确率太低了。如果您随机猜测 33 个标签,您将获得 3% 的准确率。 你的问题真的是33多类分类问题吗?如果不是,您可能在创建数据batch_y 时做错了(尺寸错误,形状与prediction 不匹配,...)。

【讨论】:

其实是的,我的问题是49多类分类问题。我检查了y标签数据,似乎还不错。 好的,但我仍然认为这是一个错误。在 44 个多类分类中猜错所有标签给了我 164.37 的损失。你的“~170k loss”有问题

以上是关于神经网络 - Softmax 交叉熵损失减少对应于准确性降低的主要内容,如果未能解决你的问题,请参考以下文章

Softmax 交叉熵损失爆炸式增长

直观理解为什么分类问题用交叉熵损失而不用均方误差损失?

在pytorch中使用交叉熵损失时我应该使用softmax作为输出吗?

Pytorch - 使用一种热编码和 softmax 的(分类)交叉熵损失

交叉熵损失函数

Softmax 的交叉熵是不是适用于多标签分类?