为什么在精度保持不变的情况下损失会减少?

Joe*_*oti 5 python deep-learning keras tensorflow

我正在用股票过去 90 天的财务数据训练一个正常的前馈网络,我正在预测股票在第二天是上涨还是下跌。我使用二元交叉熵作为优化器的损失和标准 SGD。当我训练时,训练和验证损失继续下降,但准确度和验证准确度保持不变。

这是我的模型:

_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
dense (Dense)                (None, 90, 256)           1536
_________________________________________________________________
elu (ELU)                    (None, 90, 256)           0
_________________________________________________________________
flatten (Flatten)            (None, 23040)             0
_________________________________________________________________
dropout (Dropout)            (None, 23040)             0
_________________________________________________________________
dense_1 (Dense)              (None, 1024)              23593984
_________________________________________________________________
elu_1 (ELU)                  (None, 1024)              0
_________________________________________________________________
dropout_1 (Dropout)          (None, 1024)              0
_________________________________________________________________
dense_2 (Dense)              (None, 512)               524800
_________________________________________________________________
elu_2 (ELU)                  (None, 512)               0
_________________________________________________________________
dropout_2 (Dropout)          (None, 512)               0
_________________________________________________________________
dense_3 (Dense)              (None, 512)               262656
_________________________________________________________________
elu_3 (ELU)                  (None, 512)               0
_________________________________________________________________
dropout_3 (Dropout)          (None, 512)               0
_________________________________________________________________
dense_4 (Dense)              (None, 256)               131328
_________________________________________________________________
activation (Activation)      (None, 256)               0
_________________________________________________________________
dense_5 (Dense)              (None, 2)                 514
_________________________________________________________________
activation_1 (Activation)    (None, 2)                 0
_________________________________________________________________
Total params: 24,514,818
Trainable params: 24,514,818
Non-trainable params: 0
_________________________________________________________________
Run Code Online (Sandbox Code Playgroud)

我预计要么两个损失都应该减少而两个准确度都增加,要么网络会过度拟合并且验证损失和准确度不会有太大变化。无论哪种方式,损失与其相应的准确度值不应该直接相关并相互成反比吗?

另外,我注意到我的验证损失总是小于我的正常损失,这对我来说似乎是错误的。

这是损失(正常:蓝色,验证:绿色)

损失

这是准确性(正常:黑色,验证:黄色):

准确性

Szy*_*zke 11

loss和accuracy确实是有联系的,但关系没那么简单。

损失下降但准确率大致相同

假设我们有 6 个样本,我们y_true可能是:

[0, 0, 0, 1, 1, 1]
Run Code Online (Sandbox Code Playgroud)

此外,让我们假设我们的网络预测以下概率:

[0.9, 0.9, 0.9, 0.1, 0.1, 0.1]
Run Code Online (Sandbox Code Playgroud)

~24.86由于每个样本都是错误的,这使我们的损失等于和准确度为零。

现在,在通过反向传播更新参数后,假设新的预测是:

[0.6, 0.6, 0.6, 0.4, 0.4, 0.4]
Run Code Online (Sandbox Code Playgroud)

可以看到这些是对真实分布的更好估计(此示例的损失为16.58),而准确度没有改变并且仍然为零。

总而言之,关系更复杂,网络可以为一些例子固定它的参数,同时为其他例子破坏它们,保持准确性大致相同。

为什么我的网络无法适应数据?

当您的数据非常复杂(或不完整)和/或您的模型太弱时,通常会发生这种情况。这两种情况都是如此,财务数据预测有很多您的模型无法推断的隐藏变​​量。此外,密集层不是用于此任务的层。每一天都取决于之前的值,它非常适合循环神经网络,您可以在此处找到有关 LSTM 以及如何使用它们的文章(以及网络上的大量其他文章)。