You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于TensorFlow后端的Keras:多输入并行处理的LSTM-Dense回归预测模型构建

Keras多输入回归模型实现:LSTM处理3D序列+Dense处理特征矩阵

没问题,我帮你一步步搞定这个多输入的回归预测模型,完全适配TensorFlow Keras环境,直接上可运行的代码和关键细节解释:

步骤1:导入必要的依赖库

首先导入Keras的核心模块和层:

import tensorflow as tf
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, LSTM, Dense, Concatenate, Dropout
from tensorflow.keras.callbacks import EarlyStopping  # 可选,用于早停防止过拟合

步骤2:构建两个输入分支

我们需要分别为3D序列特征X1和关键特征矩阵X2构建独立的处理分支:

分支1:LSTM处理3D序列特征X1

针对形状为(9000, 300, 3)的序列数据,用LSTM提取时序特征:

# 定义X1的输入层,形状是(时间步长, 特征数)=(300,3)
input_x1 = Input(shape=(300, 3), name="sequence_input")

# LSTM层:64个隐藏单元,仅返回最后一个时间步的输出(回归任务足够)
x1 = LSTM(64, return_sequences=False)(input_x1)
x1 = Dropout(0.2)(x1)  # 加入Dropout抑制过拟合
x1 = Dense(32, activation="relu")(x1)  # 进一步压缩特征

分支2:Dense层处理关键特征X2

针对形状为(9000, 106)的结构化特征,用全连接层提取特征:

# 定义X2的输入层,形状是(特征数,)=(106,)
input_x2 = Input(shape=(106,), name="dense_input")

x2 = Dense(64, activation="relu")(input_x2)
x2 = Dropout(0.2)(x2)
x2 = Dense(32, activation="relu")(x2)

步骤3:合并分支并构建输出层

将两个分支的特征合并后,接入回归任务的输出层:

# 拼接两个分支的输出特征
combined_features = Concatenate()([x1, x2])

# 回归任务输出层:1个单元,线性激活(默认就是linear,适合回归)
output = Dense(1, name="regression_output")(combined_features)

步骤4:定义完整模型并编译

指定模型的输入和输出,然后编译模型(回归任务用MSE损失):

# 构建完整模型
model = Model(inputs=[input_x1, input_x2], outputs=output)

# 编译模型:Adam优化器+MSE损失(回归任务标准配置)
model.compile(
    optimizer="adam",
    loss="mean_squared_error",
    metrics=["mean_absolute_error"]  # 可选,监控MAE指标
)

# 打印模型结构确认(可选)
model.summary()

步骤5:按你的计划训练模型

直接用zip(X1, X2)作为输入,和你预想的训练方式一致:

# 设置训练参数
BATCH_SIZE = 32
EPOCHS = 50

# 可选:加入早停回调,防止过拟合
early_stop = EarlyStopping(
    monitor="val_loss",
    patience=5,
    restore_best_weights=True  # 恢复最优权重
)

# 开始训练
history = model.fit(
    zip(X1, X2),
    y,
    batch_size=BATCH_SIZE,
    epochs=EPOCHS,
    validation_split=0.2,  # 用20%数据做验证
    callbacks=[early_stop]  # 加入早停(可选)
)

关键注意事项

  • 输入形状校验:确保X1是(9000, 300, 3),X2是(9000, 106),y是(9000, 1)的回归标签,否则会报错。
  • 特征预处理:强烈建议对X1的时序特征和X2的结构化特征分别做标准化(比如StandardScaler),LSTM和Dense层对特征尺度非常敏感。
  • LSTM参数调整:如果需要提取所有时间步的特征,可以把return_sequences=True,然后接Flatten()或者堆叠LSTM层,但回归任务一般取最后一步的输出就足够。
  • 过拟合应对:除了Dropout和早停,还可以在LSTM/Dense层加入L2正则化(比如kernel_regularizer=tf.keras.regularizers.L2(0.01))。

内容的提问来源于stack exchange,提问作者Luca Massaron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:20:19