讲师中心 微信公众号
AI工具推荐 视频效率加速

Python中如何使用TensorFlow实现多输入多输出模型

落宇吖_5531

落宇吖_5531

发布时间:2026-10-05 10:29:38

|

644人浏览过

|

来源于php中文网

原创

多输入多输出模型必须用Functional API(即tf.keras.Model),因Sequential仅支持单输入单输出线性堆叠;需分别声明Input、显式调用层、用字典组织输入输出,并在compile中按名配置损失与指标。

python中如何使用tensorflow实现多输入多输出模型

多输入多输出模型必须用 tf.keras.Model,不能用 Sequential

因为 Sequential 只支持单输入单输出的线性堆叠,遇到多个输入张量(比如图像 + 文本特征)或多个预测目标(比如同时回归价格 + 分类类别),它会直接报错 ValueError: Input tensors must be of the same type 或更模糊的图构建失败。只有 Functional API 能显式定义分支结构和合并逻辑。

实操要点:

  • 每个输入需独立声明 tf.keras.Input,带明确的 shape 和可选 name
  • 所有中间层(如 Dense、Conv2D)必须显式调用,不能靠顺序隐含
  • 输出端用字典组织:键名将作为训练时 y 的 key,也影响 model.compile 中的损失函数配置
  • 模型实例化必须传入 inputs=[...] 和 outputs={...} 两个参数,缺一不可

输入数据格式必须是字典或列表,不能直接拼 NumPy 数组

喂数据时如果把多个输入强行 np.concatenate 或堆成高维数组,fit() 会提示 ValueError: Failed to convert a NumPy array to a Tensor —— 因为模型在构建时已按命名输入注册了张量结构,运行时必须严格匹配。

正确做法:

立即学习“Python免费学习笔记(深入)”;

  • 训练时 x 传字典:{'img_input': x_img, 'text_input': x_text},key 必须与 Input(name=...) 一致
  • 或传列表:[x_img, x_text],但要求输入声明顺序与列表索引严格对应(不推荐,易错)
  • 输出 y 同理:用字典 {'price_pred': y_price, 'class_pred': y_class},否则损失函数找不到对应 target
  • 验证集 validation_data 格式必须和训练集完全一致

compile() 里损失函数要按输出名对齐,权重可选但别漏掉

如果输出字典是 {'reg_out': ..., 'cls_out': ...},而 compile(loss='mse'),TensorFlow 会尝试把同一个损失套到两个输出上,大概率报 TypeError: Expected float32, got None(尤其当分类输出用了 softmax 而回归用了 linear)。

Li Python Sec Check
Li Python Sec Check

Python 安全规范检查工具:基于 CloudBase 规范、腾讯安全指南,LLM 智能分析(默认禁用,优先本地执行)

下载

必须显式指定:

  • 损失函数:用字典 {'reg_out': 'mse', 'cls_out': 'sparse_categorical_crossentropy'}
  • 损失权重(可选):loss_weights={'reg_out': 1.0, 'cls_out': 0.5},用于调节多任务梯度幅度
  • 监控指标也建议用字典形式,比如 metrics={'reg_out': 'mae', 'cls_out': 'accuracy'}

注意:如果某个输出不需要参与反向传播(比如只做推理用的辅助 head),可在该输出层加 trainable=False,但更稳妥的做法是在 compile 中将其损失设为 None。

保存和加载模型要用 save_weights_only=False,否则结构丢失

用 model.save('path') 是最安全的;但如果手动调用 model.save_weights() 再试图用 load_weights() 恢复,会报 ValueError: You are trying to load a weight file containing 12 layers into a model with 8 layers —— 因为多输入多输出模型的计算图包含多个入口/出口节点,仅存权重无法重建连接关系。

务必确认:

  • 保存时用 tf.keras.models.save_model(model, 'my_mimo_model') 或直接 model.save(...)
  • 加载时用 tf.keras.models.load_model('my_mimo_model'),不要用 load_weights
  • 若需跨环境部署(如转 TFLite),先用 tf.keras.models.clone_model 复制结构,再载入权重,避免依赖原始 Python 定义

真正麻烦的不是写法,而是调试时发现某一路输入没进图、某路输出梯度为零——这种问题不会报错,只会让 loss 不下降。建议从单输入单输出 baseline 开始,逐步加分支,并用 model.summary() 对照每层 input/output shape 是否符合预期。

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1651

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

4084

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1649

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

23657

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2887

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2927

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1143

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

596

2023.08.10

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn