如何解决LSTM模型训练时输入维度不匹配的ValueError报错
问题原因
LSTM 层要求输入为3维张量,格式为(样本数量, 时间窗口长度, 特征数量),你当前生成的输入数据X为4维,形状是(样本数, 5, 1, 1),多了一个无用的维度,和你定义的模型输入形状(5,1)不匹配,因此触发维度不兼容报错。
解决方案
方案1:修改数据生成函数,直接输出符合要求的维度
你在构造row的时候使用了两层列表嵌套[[a] for a in df_as_np[i:i+5]],导致多生成了最后一个冗余维度,调整为一层嵌套即可:
def df_to_X_y(df,window_size=5): df_as_np = df.to_numpy() X = [] y = [] for i in range(len(df_as_np)-window_size): # 移除多余的一层括号 row = [a for a in df_as_np[i:i+5]] X.append(row) label = df_as_np[i+5] y.append(label) return np.array(X), np.array(y)
修改后生成的X形状为(样本数, 5, 1),直接匹配模型输入要求。
方案2:直接压缩现有数据的冗余维度
如果你不想调整数据生成逻辑,可以用numpy的维度压缩方法处理已生成的X:
# 去掉所有长度为1的冗余维度 X = X.squeeze()
处理完成后再拆分训练集、验证集、测试集送入模型即可正常训练。
内容的提问来源于stack exchange,提问作者Amirhossein
相关产品推荐
相关产品推荐

