我有一个玩具玩具系列数据集,由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
任何见解都将受到感激,谢谢!
答案 0 :(得分:3)
现在,您的模型已设置为分类器,但是从您的描述看来,您似乎正在尝试解决回归问题。让我知道我是否误会了。
尝试将最终密集层上的激活更改为“线性”。 还将损失函数更改为“ mean_squared_error”或其他回归损失。 https://keras.io/losses/
您将无法获得回归问题的准确性评分,相反,您将看到均方误差和您添加的其他任何回归指标,例如“ mae”作为均值平均误差,这对于更易于理解的误差很有用数字。
您应该可以使用小型网络来解决此问题,因此不必增加层数和单位数。
针对您的评论:
如果时序不互相影响,那么实际上没有任何理由同时预测它们,因此您必须先决定。这是将它们更改为所需分类问题的方法。
根据您的描述,我看不到将X轴构造为分类问题的方法,因为它只是数量的增加。
对于Y轴,您可以让网络预测下一个点是否为零。因此,您希望该轴的标签为0或1,具体取决于该点是否为0。最终的激活将是具有1个单位和S形激活的致密层。但是,如果非零值的出现是完全随机的,则不可能准确预测。
对于Z轴,您可以将其框架化为多类分类问题。标签的宽度为3,其中正确的数字是一个热编码。因此,如果下一个Z轴值为2,则您的标签将为[1、0、0]。最后一层应该是3个单元的密集层。激活应该是softmax,因为您希望它选择3个选项中的1个,如S型激活那样,可以选择这3个选项的任意组合。
如果使用Kerases功能模型API进行多输出,则可以在一个网络中预测所有这些信息。