多输入多输出模型必须用tf.keras.model而非sequential,因后者仅支持单入单出;需用functional api显式定义input、分支处理、字典格式的inputs/outputs,并在fit时传入对应key的dict数据,loss/metrics按输出名分别配置。

多输入多输出模型必须用 tf.keras.Model,不能用 Sequential
因为 Sequential 只支持单输入单输出的线性堆叠,遇到多个输入张量(比如图像 + 文本特征)或多个输出头(比如分类 + 回归),它直接报错:ValueError: Model expects 1 input(s), but received 2 input tensors。只有 Functional API 支持定义分支结构,tf.keras.Model 是其封装后的可训练对象。
实操建议:
- 先用
Input显式声明每个输入,例如input_img = Input(shape=(224, 224, 3))和input_tab = Input(shape=(12,)) - 对每个输入单独构建处理路径(如 CNN、Dense),避免共享层名冲突
- 用字典方式传入
Model(inputs={...}, outputs={...}),键名会成为训练时fit()的x和y的 key
输入数据格式必须匹配 Model 定义的键名和 shape
常见错误是传入 list 而非 dict:比如模型定义了 inputs={'img': ..., 'meta': ...},但调用 model.fit([x_img, x_meta], [y_cls, y_reg]),就会触发 TypeError: Expected dict, got list。
正确做法:
python-docx Skill功能概述python-docx Skill是一项面向实际任务的技能,主要用于本Skill提供使用python-docx生成专业Word文档的标准方法和最佳实践;生成安全服务方案文档;核心要点生成技术架构设计文档;生成任何需要专业排版的Word文档;核心库 : python-docx;使用与执行辅助库 : docx.shared , docx.enum , docx.oxml.ns;标准代码模板;1. 文档初始化;2. 字体设置(必须!它将相关步骤、工具调用和结果整理方式集
- 训练时
x必须是 dict,key 与Input的 name 或显式指定的键一致,例如{'img': x_img, 'meta': x_meta} -
y同样用 dict,key 对应各输出层的 name,如{'class_out': y_cls, 'reg_out': y_reg} - 若某输入/输出未命名,Keras 会自动生成默认名(如
input_1),但极易出错,务必显式设name参数
多输出 loss 和 metrics 需按输出名分别指定
如果只传一个 loss 函数(如 loss='sparse_categorical_crossentropy'),Keras 会尝试把它套用到所有输出,导致维度不匹配或梯度异常。真实场景中,分类输出常用交叉熵,回归输出常用 MSE,必须分开配置。
实操要点:
-
loss接受 dict,例如{'class_out': 'sparse_categorical_crossentropy', 'reg_out': 'mse'} -
loss_weights可选,用于平衡不同任务梯度幅度,如{'class_out': 1.0, 'reg_out': 0.3} -
metrics同样按输出名组织,避免全局 metrics 混淆评估目标
保存与加载需注意子模型结构不可丢
用 model.save('path') 保存 Functional 模型没问题,但若后续想单独提取某个输入分支(比如只取图像编码器做迁移),直接 model.layers[0] 很可能不是你想要的 Input 层——Functional 模型的 layers 列表包含内部占位符和运算节点,顺序不直观。
更可靠的做法:
- 构建时把关键子模块赋给变量,如
img_encoder = Model(inputs=input_img, outputs=features),再在主模型中调用它 - 保存整个模型后,用
tf.keras.models.load_model('path')加载,仍保持输入/输出字典接口 - 避免用
model.to_json() + load_weights(),Functional 模型的架构信息在 JSON 中不易还原完整连接关系
predict() 时某一路输入 shape 稍有偏差,就会卡在第一层 Input 校验上。Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










