C++使用Tensorflow2.6训练好的模型进行预测

本文介绍了如何在C++中使用TensorFlow 2.6的C API调用已训练好的模型进行预测。首先,通过TensorFlow C API加载saved_model格式的模型,并利用saved_model_cli获取输入和输出层的名字。接着,在VS2013中创建C++控制台项目,配置TensorFlow库和opencv库。通过opencv处理图像数据并转化为Tensor。最后,演示了C++代码如何加载模型并执行预测,解决可能的tensorflow.dll缺失问题,成功获得预测结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要在C语言中调用训练好的TensorFlow模型,需要使用TensorFlow C API。
https://tensorflow.google.cn/install/lang_c?hl=zh-cnten

TensorFlow 提供了一个 C API,该 API 可用于为其他语言构建绑定。该 API 在 c_api.h 中定义,旨在实现简洁性和一致性,而不是便利性。
在这里插入图片描述

下载后解压。得到文件夹结构,lib是tensorflow的动态链接库和对应的lib文件目录。include是头文件目录

├─include
│  └─tensorflow
│      ├─c
│      │  └─eager
│      └─core
│          └─platform
└─lib

python tensorflow2.6需要把训练好的模型保存为saved_model格式
tensorflow2.6在模型训练完成后保存,默认就是saved_model格式

model
### TensorFlow 2.6 C++ 示例代码 为了展示如何使用TensorFlow 2.6C++ API,下面提供了一个简单的例子。此示例展示了加载模型并执行推理的过程。 #### 加载和初始化模型 首先需要创建会话并加载已保存的模型: ```cpp #include "tensorflow/cc/client/client_session.h" #include "tensorflow/cc/saved_model/loader.h" #include "tensorflow/core/platform/env.h" using namespace tensorflow; // 定义路径变量 string export_dir = "/path/to/saved/model"; SavedModelBundle bundle; RunOptions run_options; Status load_status = LoadSavedModel(run_options, {}, export_dir, {"serve"}, &bundle); if (!load_status.ok()) { std::cerr << "Failed to load model: " << load_status.ToString() << "\n"; } ``` #### 准备输入张量 接着准备用于推断的数据作为输入张量传递给模型: ```cpp std::vector<Tensor> inputs; inputs.emplace_back(DT_FLOAT, TensorShape({1, 784})); auto input_tensor_mapped = inputs[0].flat<float>().data(); for (int i = 0; i < 784; ++i) { // 假设MNIST图像大小为28*28=784像素 input_tensor_mapped[i] = /* your data here */; } ``` #### 执行预测操作 最后通过客户端会话对象执行实际的计算过程,并获取输出结果: ```cpp ClientSession session(bundle.GetMetaGraphDef().graph_def()); std::vector<Tensor> outputs; Status run_status = session.Run( {{"input_node_name", inputs[0]}}, // 输入节点名称应替换为你自己的 {"output_node_name"}, // 输出节点名称也需相应修改 {}, &outputs); if (!run_status.ok()) { std::cerr << "Running model failed: " << run_status.ToString() << "\n"; } // 处理输出... float result_value = outputs[0].scalar<float>()(); // 对于单个浮点数输出的情况 ``` 上述代码片段提供了基本框架来帮助理解如何利用TensorFlow 2.x系列中的C++接口进行开发[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百口可乐__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值