Keras构建比特币价格预测器时LSTM输入维度不兼容问题求助
解决LSTM输入维度不兼容的问题
这个错误的核心是输入层的形状定义错误,导致模型接收到了4维张量,而LSTM层只接受3维张量((batch_size, timesteps, features))。咱们一步步拆解问题并修复:
问题根源分析
你已经把原始数据从(5000,6)重塑为(5000,1,6),这个形状其实是符合LSTM要求的:
5000:样本数量(samples)1:时间步长(timesteps)6:特征数(features)
但你在定义输入层时写了:
myModel.add(keras.Input(np.shape(train_data),))
np.shape(train_data)返回的是(5000,1,6),这会让Input层把输入形状定义为(5000,1,6)。当模型运行时,Keras会自动加上batch维度,最终输入张量的形状就变成了(None,5000,1,6)——也就是4维,这完全不符合LSTM的要求。
修复步骤
1. 修正输入层的形状定义
Input层只需要指定除batch_size之外的输入维度,也就是(timesteps, features)。把输入层改成:
myModel.add(keras.Input(shape=(1, 6)))
这样模型期望的输入就是(batch_size,1,6),和你预处理后的train_data形状完美匹配。
2. 检查并修正模型训练的参数
你当前的fit调用还有两个明显错误:
- 第二个参数应该是训练集的目标标签(y_train),而不是
test_data validation_split需要是0到1之间的小数(比如用0.15表示15%的验证集),而不是15.0
修正后的fit代码示例:
# 假设你已经把数据拆分成x_train(输入特征)和y_train(预测目标) myModel.fit(x_train, y_train, batch_size=100, epochs=50, validation_split=0.15)
3. 修复堆叠LSTM的潜在问题
你堆叠了两层LSTM,但前一层默认return_sequences=False,只会返回最后一个时间步的2维输出,下一层LSTM会因为输入维度不匹配报错。所以必须给第一层LSTM加上return_sequences=True:
完整的修正后模型代码:
import keras from keras.layers import LSTM, Dense # 假设train_data已经是(5000,1,6)的形状 myModel = keras.Sequential(name='cryptoPredictor') myModel.add(keras.Input(shape=(1, 6))) myModel.summary() myModel.add(LSTM(128, activation='tanh', return_sequences=True)) # 开启return_sequences供下一层LSTM使用 myModel.summary() myModel.add(LSTM(128, activation='tanh')) myModel.summary() myModel.add(Dense(1)) myModel.summary() myModel.compile(optimizer='rmsprop', loss='mse', metrics=['mae']) myModel.fit(x_train, y_train, batch_size=100, epochs=50, validation_split=0.15)
内容的提问来源于stack exchange,提问作者user9830671
相关产品推荐
相关产品推荐

