Keras LSTM模型输入维度不匹配及数据基数歧义报错如何解决
报错核心原因
- LSTM层要求输入为3维张量,格式固定为
(样本数, 时间步长, 单样本特征数),你之前的输入数据是1维/2维结构,直接传入就会触发维度不匹配报错 - 你同时配置了
input_shape和input_dim两个参数,二者逻辑冲突,且input_dim=2和你当前单特征的数据集完全不匹配 - 数据reshape逻辑错误会导致x和y的样本数量不一致,直接触发cardinality报错
- 你当前的模型缺少输出层,LSTM输出维度和你要预测的时间值维度不匹配,就算维度对了也无法正常训练
可运行的修改后代码
import numpy as np from keras.models import Sequential from keras.layers.core import Dense from keras.layers import LSTM import tensorflow as tf time_list = [1296000.0, 19350000.0, 29635200.0, 48294000.0, 45961200.0] price_list = [0.05260218, 0.05260218, 0.0, 0.96769388, 1.0] these_dates = np.array(time_list) prices = np.array(price_list) # 调整输入为LSTM要求的3维结构:样本数5,每个样本时间步长1,特征数1 prices = prices.reshape(len(prices), 1, 1) # 调整标签维度为(样本数, 输出维度) these_dates = these_dates.reshape(-1, 1) model = Sequential() # input_shape参数只需要填(时间步长, 特征数),不需要填样本数,也不需要加input_dim参数 model.add(LSTM(10, input_shape=(1, 1))) # 新增输出层,对应你要预测的1个时间数值 model.add(Dense(1)) model.compile(optimizer='adam', loss='mean_squared_error') model.fit(prices, these_dates, batch_size=1, epochs=1)
补充说明
不需要新增额外特征(比如税费数据)也可以正常运行,报错和特征数量无关,完全是维度排布和模型结构的问题。
如果你要做标准的时间序列预测(比如用前N个时间段的价格预测下一个时间段的价格/时间),只需要调整时间步长参数,把输入数据按滑窗规则重构即可,不需要修改核心维度逻辑。
内容的提问来源于stack exchange,提问作者tgmjack
相关产品推荐
相关产品推荐

