我试图使用Keras对单变量时间序列进行预测。
神经网络模型看起来像这样
Model: "sequential"_________________________________________________________________Layer (type) Output Shape Param # =================================================================conv1d (Conv1D) (None, None, 25) 150 _________________________________________________________________lstm (LSTM) (None, None, 1024) 4300800 _________________________________________________________________dropout (Dropout) (None, None, 1024) 0 _________________________________________________________________lstm_1 (LSTM) (None, None, 1024) 8392704 _________________________________________________________________dropout_1 (Dropout) (None, None, 1024) 0 _________________________________________________________________lstm_2 (LSTM) (None, None, 1024) 8392704 _________________________________________________________________dropout_2 (Dropout) (None, None, 1024) 0 _________________________________________________________________lstm_3 (LSTM) (None, None, 1024) 8392704 _________________________________________________________________dropout_3 (Dropout) (None, None, 1024) 0 _________________________________________________________________dense (Dense) (None, None, 1) 1025 =================================================================Total params: 29,480,087Trainable params: 29,480,087Non-trainable params: 0_________________________________________________________________
我的数据使用系列的前三个值进行窗口化以预测下一个值。因此,我的测试数据集看起来像这样
list(dataset.as_numpy_iterator())[array([[[ 0. ], [ 0.02346429], [ 0.04559132]], [[ 0. ], [ 0.02161974], [ 0.13014923]], [[ 0. ], [ 0.10623277], [-0.02918068]], [[ 0. ], [-0.12240955], [-0.21869095]]])]
一切正常,但是当我将这些数据输入到model.predict(dataset)
时,输出的结果是
array([[[ 0.01316399], [ 0.03728709], [ 0.06164959]], [[ 0.01316399], [ 0.03512047], [ 0.1292857 ]], [[ 0.01316399], [ 0.1172413 ], [-0.01671433]], [[ 0.01316399], [-0.10654409], [-0.16395506]]], dtype=float32)
这个例子中的形状是(4, 3, 1)
鉴于我的神经网络的最后一层是一个单元的Dense层,我期望每个输入特征三元组只得到一个预测结果。为什么每个训练样本的预测似乎有三个输出呢?
回答:
在你的最后一个LSTM层中,设置参数return_sequences=False。
LSTM(..., return_sequences=False)