关于使用Keras进行LSTM时间序列预测的参数问题

关于使用Keras进行LSTM时间序列预测的参数问题


现在有一组时间序列数据,每个时间点的features为7,想通过前三组时间序列数据预测后两组,于是我把数据reshape成如下的鬼样子:
train_X(43796, 3, 7)
[[[0.12977867 0.35294122 0.24590163 … 0.00229001 0. 0. ]
[0.14889336 0.36764708 0.24590163 … 0.00381099 0. 0. ]
[0.15995975 0.4264706 0.22950819 … 0.00533197 0. 0. ]]

[[0.14889336 0.36764708 0.24590163 … 0.00381099 0. 0. ]
[0.15995975 0.4264706 0.22950819 … 0.00533197 0. 0. ]
[0.18209255 0.48529413 0.22950819 … 0.00839101 0.03703704 0. ]]

[[0.15995975 0.4264706 0.22950819 … 0.00533197 0. 0. ]
[0.18209255 0.48529413 0.22950819 … 0.00839101 0.03703704 0. ]
[0.13883299 0.48529413 0.22950819 … 0.00991199 0.07407407 0. ]]


train_y(43796, 2, 7)
[[[0.18209255 0.48529413 0.22950819 … 0.00839101 0.03703704 0. ]
[0.13883299 0.48529413 0.22950819 … 0.00991199 0.07407407 0. ]]

[[0.13883299 0.48529413 0.22950819 … 0.00991199 0.07407407 0. ]
[0.10965794 0.48529413 0.21311474 … 0.01143297 0.11111111 0. ]]

[[0.10965794 0.48529413 0.21311474 … 0.01143297 0.11111111 0. ]
[0.1056338 0.48529413 0.21311474 … 0.01449201 0.14814815 0. ]]


好的,我觉得没什么问题啊,但是天要搞我,LSTM模型如下:

# design network
model = Sequential()
model.add(LSTM(50,input_shape=(train_X.shape[1], train_X.shape[2]),return_sequences=True))
model.add(Dense(train_y.shape[2]))
model.summary()
model.compile(loss='mae', optimizer='adam')
# fit network
# history = model.fit(train_X, train_y, epochs=50, batch_size=1, validation_data=(test_X, test_y), verbose=2, shuffle=False)
history = model.fit(train_X, train_y, epochs=50, batch_size=72, verbose=2, shuffle=False)

求问这里面的参数到底怎么写

model.add(LSTM(50,input_shape=(train_X.shape[1], train_X.shape[2]),return_sequences=True))
model.add(Dense(train_y.shape[2]))

因为现在跑的话都是这个错误

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_51 (LSTM)               (None, 3, 50)             11600     
_________________________________________________________________
dense_47 (Dense)             (None, 3, 7)              357       
=================================================================
Total params: 11,957
Trainable params: 11,957
Non-trainable params: 0
_________________________________________________________________

ValueError: Error when checking target: expected dense_47 to have shape (3, 7) but got array with shape (2, 7)

我想要的是(3,7)输入预测出(2,7)输出

LSTM(Long Short-Term Memory)是一种常用的循环神经网络(RNN)模型,它可以处理时间序列数据,并且能够捕捉长期依赖关系。在时间序列预测中,LSTM可以用来预测未来的数值或者趋势。 Keras是一个高级神经网络API,它可以在TensorFlow、Theano和CNTK等后端上运行。Keras提供了一个简单易用的接口,可以方便地构建和训练深度学习模型。 在Keras中,使用LSTM进行时间序列预测通常需要以下步骤: 1. 准备数据:将时间序列数据转换为可以用于训练的格式,通常是将数据划分为输入序列和输出序列。 2. 定义模型:使用Keras的Sequential模型或者函数式API定义LSTM模型,包括输入层、LSTM层和输出层。 3. 编译模型:使用compile()方法编译模型,指定损失函数、优化器和评估指标等参数。 4. 训练模型:使用fit()方法训练模型,指定训练数据、批次大小、训练轮数等参数。 5. 预测结果:使用predict()方法对新数据进行预测。 下面是一个简单的LSTM时间序列预测Keras代码示例: ``` from keras.models import Sequential from keras.layers import LSTM, Dense import numpy as np # 准备数据 data = np.array([...]) # 时间序列数据 look_back = 3 # 输入序列长度 X, Y = [], [] for i in range(len(data)-look_back): X.append(data[i:i+look_back]) Y.append(data[i+look_back]) X = np.array(X) Y = np.array(Y) # 定义模型 model = Sequential() model.add(LSTM(4, input_shape=(look_back, 1))) model.add(Dense(1)) # 编译模型 model.compile(loss='mean_squared_error', optimizer='adam') # 训练模型 model.fit(X, Y, epochs=100, batch_size=1, verbose=2) # 预测结果 new_data = np.array([...]) # 新数据 new_X = new_data.reshape((1, look_back, 1)) result = model.predict(new_X) ``` 在这个示例中,我们使用了一个LSTM层和一个全连接层,输入序列长度为3,输出为1。我们使用均方误差作为损失函数,Adam优化器进行优化。在训练过程中,我们使用了100个训练轮次和批次大小为1。最后,我们使用新数据进行预测,并输出预测结果。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值