Keras LSTM传入拼接全连接层输出时出现维度不兼容报错
报错核心原因
LSTM层要求输入必须是3维张量,固定形状为(batch_size, time_steps, feature_dim),分别对应训练批次大小、序列时间步长度、单时间步的特征数量。
现有代码传入LSTM的hhs张量形状为(None, 150),属于仅包含批次维度、特征维度的2维结构,缺失时间步维度,因此触发输入不兼容报错。
该2维形状的形成逻辑很清晰:5个Dense输出层各输出30维特征,按特征维度直接拼接后总特征数为5*30=150,自然形成了无序列结构的2维输出。
适配修复方案
根据实际的建模意图,可选择对应调整方式:
- 若建模意图是把5个并行的Dense输出当作长度为5的序列(即5个Dense层对应5个时间步,每个时间步包含30个特征)
保留原有拼接逻辑,在拼接后增加Reshape层拆分维度,凑成LSTM要求的3维输入即可:hhs = layers.concatenate([first_output, second_output, third_output, fourth_output, fifth_output]) # 形状变换:(None,150) → (None,5,30) hhs_seq = layers.Reshape((5, 30))(hhs) xxs = layers.LSTM(5)(hhs_seq) - 若拼接后的特征本身是单时间步的常规全连接特征,仅计划用LSTM完成后续特征转换
需要在原有特征基础上补上长度为1的时间步维度,满足LSTM的输入格式要求:hhs = layers.concatenate([first_output, second_output, third_output, fourth_output, fifth_output]) # 形状变换:(None,150) → (None,1,150) hhs_seq = layers.Reshape((1, 150))(hhs) xxs = layers.LSTM(5)(hhs_seq)
提示:如果本身没有序列建模需求,仅需处理拼接后的全连接特征,可直接接入Dense层,无需强制使用LSTM,避免维度转换带来的语义偏差。
内容的提问来源于stack exchange,提问作者Santosh Kumar
相关产品推荐
相关产品推荐

