Keras损失减少,但准确性保持不变

时间:2019-08-11 20:50:57

标签: python tensorflow keras deep-learning

我正在训练有关股票最近90天的财务数据的正常前馈网络,并且我预测股票在第二天会上涨还是下跌。我使用二进制交叉熵作为优化器的损失和标准SGD。当我训练时,训练和验证损失会继续下降,但准确性和验证准确性保持不变。

这是我的模特:


图层(类型)输出形状参数#

密集(密集)(无,90、256)1536


elu(ELU)(无,90、256)0


展平(展平)(无,23040)0


辍学(Dropout)(无,23040)0


dense_1(密集)(无,1024)23593984


elu_1(ELU)(无,1024)0


dropout_1(退出)(无,1024)0


dense_2(密集)(无,512)524800


elu_2(ELU)(无,512)0


dropout_2(退出)(无,512)0


dense_3(密集)(无,512)262656


elu_3(ELU)(无,512)0


dropout_3(退出)(无,512)0


dense_4(密集)(无,256)131328


激活(激活)(无,256)0


dense_5(密集)(无,2)514


activation_1(激活)(无,2)0


总参数:24,514,818 可训练的参数:24,514,818 不可训练的参数:0


我希望要么两种损失都应减少,而两种准确性都将增加,否则网络将变得过拟合,并且验证损失和准确性不会有太大变化。两种方法都不应该直接将损失及其相应的精度值链接起来并彼此反向移动吗?

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

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

Loss

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

Accuracy

1 个答案:

答案 0 :(得分:3)

损失和准确性确实是联系在一起的,但是关系并不是那么简单。

损失下降,但准确性大致相同

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

[0, 0, 0, 1, 1, 1]

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

[0.9, 0.9, 0.9, 0.1, 0.1, 0.1]

这使我们的损失等于~24.86,而由于每个样本都是错误的,因此精度等于零。

现在,通过backprop更新参数后,假设新的预测是:

[0.6, 0.6, 0.6, 0.4, 0.4, 0.4]

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

总而言之,关系更加复杂,网络可以在某些示例中修复其参数,而在其他示例中销毁它们,从而使准确性保持相同。

为什么我的网络无法容纳这些数据?

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