gpt4 book ai didi

python - 3向量级数LSTM不能突破0.5精度

转载 作者:行者123 更新时间:2023-11-30 08:53:37 25 4
gpt4 key购买 nike

我有一个 3 向量玩具系列数据集,格式为

[[0, 0, 2], [1, 0, 3], [2, 0, 4], [3, 0, 2], [4, 0, 3], [5, 0, 4] ... [10001, 0, 4]]

x 总是增加 1,y 总是 0,z 重复 2、3、4。我想在给定起始序列的情况下预测序列中的下一个 3 向量。我使用的窗口大小为 32,但也尝试过 256,结果相同。

在将每个维度发送到模型之前,我将其标准化为 0 到 1 之间。无论我添加多少层、多少单元、多少特征,模型的准确度都不会超过 0.5 左右,我想了解为什么。

我对第 33 项的预测是 [4973.29 0.000 3.005] 而实际值是 [32 0 4] 我不知道这是否是错误的因为 0.5 的精度或者其他原因。

我的模型如下所示:

# X_modified shape: (9970, 32, 3)
# Y_modified shape: (9970, 3)

model = Sequential()

model.add(LSTM(units=128, input_shape=(X_modified.shape[1], X_modified.shape[2]), return_sequences=True))
model.add(Dropout(0.2))

model.add(LSTM(units=128, return_sequences=True))
model.add(Dropout(0.2))

model.add(LSTM(units=128))
model.add(Dropout(0.2))

model.add(Dense(Y_modified.shape[1], activation='softmax'))

model.compile(loss='categorical_crossentropy', metrics=['accuracy'], optimizer='adam')

以下是摘要和图表:

_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm_204 (LSTM) (None, 32, 128) 67584
_________________________________________________________________
dropout_199 (Dropout) (None, 32, 128) 0
_________________________________________________________________
lstm_205 (LSTM) (None, 32, 128) 131584
_________________________________________________________________
dropout_200 (Dropout) (None, 32, 128) 0
_________________________________________________________________
lstm_206 (LSTM) (None, 128) 131584
_________________________________________________________________
dropout_201 (Dropout) (None, 128) 0
_________________________________________________________________
dense_92 (Dense) (None, 3) 387
=================================================================
Total params: 331,139
Trainable params: 331,139
Non-trainable params: 0
_________________________________________________________________
None

enter image description here

非常感谢任何见解,谢谢!

最佳答案

现在您的模型已设置为分类器,但从您的描述来看,您似乎正在尝试解决回归问题。如果我有误解,请告诉我。

尝试将最终密集层的激活更改为“线性”。还将损失函数更改为“mean_squared_error”或其他回归损失。 https://keras.io/losses/

您将无法获得回归问题的准确度分数,相反,您将看到均方误差和您添加的任何其他回归指标,例如平均平均误差的“mae”,这对于更易于理解的错误非常有用数量。

您应该能够使用小型网络来解决此问题,因此无需增加层数和单元数。

回复您的评论:

如果时间序列彼此不交互,那么实际上没有任何理由同时预测它们,因此您必须首先做出决定。以下是您如何将它们更改为您想要的分类问题。

根据您的描述,我看不到将 X 轴视为分类问题的方法,因为它只是一个不断增加的数字。

对于 Y 轴,您可以让网络预测下一个点是否为零。因此,您可能希望该轴的标签为 0 或 1,具体取决于该点是否为 0。最终的激活将是一个具有 1 个单元和 sigmoid 激活的密集层。但是,如果非零值的出现完全随机,则无法准确预测。

对于 Z 轴,您可以将其视为多类分类问题。您的标签宽度为 3,其中正确的数字是 1 个热编码。因此,如果下一个 Z 轴值为 2,那么您的标签将为 [1, 0, 0]。最后一层应该是具有 3 个单元的致密层。激活应该是 softmax,因为您希望它选择 3 个选项中的 1 个,这与可以选择这三个选项的任意组合的 sigmoid 激活相反。

如果您使用 Kerases 功能模型 API 进行多输出,您可以在一个网络中预测所有这些。

关于python - 3向量级数LSTM不能突破0.5精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51145007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com