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 以及如何使用它们的文章(以及网络上的大量其他文章)。
| 归档时间: |
|
| 查看次数: |
4483 次 |
| 最近记录: |