TensorFlow Keras搭建序列模型时输出形状异常原因咨询
问题原因
输出形状不符合预期的核心原因是两层LSTM都配置了return_sequences=True:
- 该参数为
True时,LSTM会返回所有时间步的隐藏状态,输出形状为(batch_size, 时间步长度, 隐藏层维度);参数为False(默认值)时,才只会返回最后一个时间步的输出,形状为(batch_size, 隐藏层维度)。 - 你的输入是单样本含3个值的数组,进入Conv1D时会按时间步维度处理,两层LSTM都返回全序列的情况下,后续Dense层会逐时间步做全连接计算,最终输出形状会保留3个时间步的维度,和输入时间步长度一致,自然无法输出单个浮点数标签。
修复方案
将第二层LSTM的return_sequences参数改为False(直接删除该参数配置即可,默认就是False),让第二层LSTM仅输出最后一个时间步的特征,后续全连接层就会输出单个预测值:
model = tf.keras.models.Sequential([ tf.keras.layers.Conv1D(filters=128, kernel_size=1,strides=1, padding="causal",activation="relu"), tf.keras.layers.LSTM(128, return_sequences=True), tf.keras.layers.LSTM(128), # 移除return_sequences=True配置,仅返回最后一个时间步输出 tf.keras.layers.Dense(10, activation="relu"), tf.keras.layers.Dense(1) ]) model.compile( loss=tf.losses.MeanSquaredError(), metrics=[ tf.keras.metrics.MeanSquaredError(name='my_mse'), tf.keras.metrics.RootMeanSquaredError(name='my_rmse'), tf.keras.metrics.MeanAbsoluteError(name='my_mae') ] )
额外提醒:Conv1D、LSTM层要求输入为3维格式
(样本数, 时间步长, 特征数),如果你的原始输入是形状为(样本数, 3)的二维数组,需要先reshape为(样本数, 3, 1)再传入模型,否则会触发维度不匹配报错。
内容的提问来源于stack exchange,提问作者rem_la_menace
相关产品推荐
相关产品推荐

