c++ 机器学习框架 c++如何使用tensorflow或pytorch的c++ api

老墨大大_5783

老墨大大_5783

2026-03-20

731人浏览

原创

tensorflow c++ api 能加载 python 训练的模型但限制多,需严格匹配版本、正确导出 savedmodel 并验证签名;libtorch 更易上手但对导出方式敏感;工程中推荐 onnx + onnx runtime 或 http/grpc 方案。

c++ 机器学习框架 c++如何使用tensorflow或pytorch的c++ api

TensorFlow C++ API 能不能直接用训练好的 Python 模型

能,但限制多、流程绕、容易卡在模型导出或加载环节。核心问题是:Python 侧用 tf.saved_model.save 导出的模型,C++ 侧必须用 tensorflow::SavedModelBundle::LoadSavedModel 加载,且依赖编译时链接的 TensorFlow C++ 库版本严格匹配 Python 的 tensorflow 版本(比如 Python 用 2.15,C++ 就不能用 2.14 或 2.16)。常见错误现象是 Failed to find MetaGraphDef 或 Op type not registered——本质是算子注册不全或图格式不兼容。

实操建议:

  • 导出时显式指定 signatures,例如用 model.signatures['serving_default'],避免 C++ 侧靠名字猜入口
  • C++ 加载后务必调用 bundle->GetSignatures() 打印签名,确认输入输出张量名和 shape 是否与 Python 侧一致
  • 不要用 tf.keras.models.load_model(..., compile=False) 这类 Python 侧便利函数导出的 HDF5 格式——C++ API 完全不支持
  • 若模型含自定义 op 或 Keras 层,需额外编译并注册,普通用户基本无法绕过

PyTorch C++ API(LibTorch)加载 .pt 文件的实际门槛

比 TensorFlow C++ 更友好,但“能跑通”和“能稳定用”是两回事。LibTorch 支持直接加载 torch.jit.trace 或 torch.jit.script 导出的 .pt 文件,前提是导出时没用动态控制流(如 if x > 0:)、没调用未 trace 到的 Python 函数,且所有 tensor device 一致(别混着 cpu() 和 cuda() 导出)。

常见错误现象:

C++ Code Review Master
C++ Code Review Master

组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。

下载
  • Expected object of device cpu but got device cuda:导出时用了 .cuda(),但 C++ 代码没初始化 CUDA 上下文或没 link cudart
  • Module has no attribute 'forward':导出用的是 torch.jit.script(model),但 model 类里 forward 是动态生成的(比如某些 Hugging Face 模型),得改用 torch.jit.trace + 典型输入
  • Linux 下运行时报 undefined symbol: _ZN3c104cuda17getCurrentCUDAStreamE:LibTorch 编译版本和运行时 CUDA 版本不匹配,不是简单换 so 文件能解决的

两个 API 在实际工程中的性能与维护代价对比

纯推理吞吐量上,LibTorch 通常比 TensorFlow C++ 高 10%–20%,尤其小 batch 场景,因为 JIT 图优化更激进、内存复用更好;但 TensorFlow C++ 对多线程 session 复用、模型热更新的支持更成熟,适合长期运行的服务进程。

维护代价差异更大:

  • LibTorch 更新频繁,0.12 → 2.0 → 2.1 接口变动大,torch::jit::load() 返回类型从 std::shared_ptr<:jit::script::module></:jit::script::module> 变成 torch::jit::Module,老代码一升级就编译不过
  • TensorFlow C++ ABI 不稳定,但头文件接口相对收敛,tensorflow::Session 和 SavedModelBundle 逻辑清晰,适合封装成固定 SDK
  • 两者都要求你手动管理 tensor 生命周期:torch::Tensor 和 tensorflow::Tensor 都不是 RAII 完全安全的,忘调 .to(at::kCPU) 或 .CopyFrom() 容易触发段错误

要不要在 C++ 项目里硬接这些框架的原生 API

除非你已稳定使用对应 Python 框架、有专人维护模型导出 pipeline、且对延迟极其敏感,否则不建议直接集成。更现实的路径是:Python 侧用 Flask/FastAPI 做轻量推理服务,C++ 用 HTTP 或 gRPC 调用;或者用 ONNX 作为中间表示,C++ 侧用 onnxruntime 加载——它对模型兼容性更宽容、ABI 更稳定、文档更实在。

真正容易被忽略的一点是:模型输入预处理和后处理逻辑,往往比框架调用本身更难迁移。Python 里一行 cv2.resize + torch.from_numpy,到 C++ 里要选 OpenCV 版本、处理 BGR/RGB、分配 pinned memory、注意 tensor channel order,这些细节出错不会报框架错误,而是结果完全不对。

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c++

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
flask框架如何搭建
flask框架如何搭建

搭建步骤:1、安装Python和Pip;2、创建虚拟环境;3、安装Flask;4、创建Flask应用;5、运行应用;6、访问应用。想了解更多flask框架的相关内容,可以阅读本专题下面的文章。

2024.06.27

3295

8

Python Flask框架
Python Flask框架

本专题专注于 Python 轻量级 Web 框架 Flask 的学习与实战,内容涵盖路由与视图、模板渲染、表单处理、数据库集成、用户认证以及RESTful API 开发。通过博客系统、任务管理工具与微服务接口等项目实战,帮助学员掌握 Flask 在快速构建小型到中型 Web 应用中的核心技能。

2025.08.25

4984

10

Python Flask Web框架与API开发
Python Flask Web框架与API开发

本专题系统介绍 Python Flask Web框架的基础与进阶应用,包括Flask路由、请求与响应、模板渲染、表单处理、安全性加固、数据库集成(SQLAlchemy)、以及使用Flask构建 RESTful API 服务。通过多个实战项目,帮助学习者掌握使用 Flask 开发高效、可扩展的 Web 应用与 API。

2025.12.15

296

16

Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API

Python FastAPI 异步开发利用 async/await 关键字,通过定义异步视图函数、使用异步数据库库 (如 databases)、异步 HTTP 客户端 (如 httpx),并结合后台任务队列(如 Celery)和异步依赖项,实现高效的 I/O 密集型 API,显著提升吞吐量和响应速度,尤其适用于处理数据库查询、网络请求等耗时操作,无需阻塞主线程。

2025.12.22

119

5

Python 微服务架构与 FastAPI 框架
Python 微服务架构与 FastAPI 框架

本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。

2026.02.06

534

18

Python Web框架FastAPI 全栈开发教程合集
Python Web框架FastAPI 全栈开发教程合集

以 FastAPI 为核心,讲解现代 Python Web API 的高效开发方式,涵盖路由定义与路径参数/查询参数/请求体绑定、Pydantic 模型的数据校验与序列化、依赖注入(Depends)系统的分层设计、中间件与 CORS 配置、OAuth2 + JWT 认证流程、后台任务(BackgroundTasks)、WebSocket 实时通信、SQLAlchemy 异步 ORM 集成、自动生成 OpenAPI/Swagger 交互文

2026.05.09

516

23

Python FastAPI异步微服务与高性能接口设计
Python FastAPI异步微服务与高性能接口设计

本专题聚焦 Python FastAPI 框架在高性能接口与微服务开发中的应用,讲解异步请求处理、依赖注入机制、路由设计、数据库异步操作以及接口性能优化策略。结合实际项目案例,帮助开发者构建高并发、低延迟的现代化后端服务架构。

2026.06.16

419

12

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

2023.10.17

580

4

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

2023.10.18

876

5

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Conan 2 Essentials 免费课程
Conan 2 Essentials 免费课程

共0课时 | 0人学习

CMake 与 Conan 集成实践
CMake 与 Conan 集成实践

共0课时 | 0人学习

Conan 2 高级依赖模型介绍
Conan 2 高级依赖模型介绍

共0课时 | 0人学习