如何在Keras的LSTM模型中获取每个时间步的输出结果
代码正确性分析与注意事项
你的代码整体符合每个时间步输出对应Y值的需求,下面拆解说明:
核心逻辑的正确性
- LSTM层的
return_sequences=True设置:
第一个LSTM设为return_sequences=True,会输出每个时间步的隐藏状态(形状为(样本数, 4, 150)),这样才能作为第二个LSTM的输入(因为第二个LSTM需要处理序列数据);第二个LSTM同样设return_sequences=True,保证输出还是序列形式((样本数, 4, 150)),为后续Dense层生成每个时间步的输出做准备。 - Dense层的作用:
最后一层Dense(1)会自动对每个时间步的150维特征做映射,最终输出形状为(样本数, 4, 1),正好对应每个时间步的1个Y值,完全匹配你的需求。 - Masking层与其他组件:
Masking层的输入形状(4,17)和你的数据集一致,Dropout层在序列数据后会对每个时间步的特征应用随机失活,不破坏序列结构。
需要注意的细节
- 输出激活函数
relu:如果你的Y值存在负数,relu会把负数截断为0,这会导致预测错误,建议换成sigmoid(Y在0-1之间)或直接去掉激活函数(Y为任意实数)。 - Masking的
mask_value:确认数据集中确实用-2.作为无效值的掩码标记,如果实际掩码值不同,需要修改这个参数,否则Masking层不会生效。 - 训练数据形状:训练时输入X的形状必须是
(样本总数, 4, 17),标签Y的形状必须是(样本总数, 4, 1),否则模型会报错。
内容的提问来源于stack exchange,提问作者bee
相关产品推荐
相关产品推荐

