C++ 中的深度学习框架实现
领域的核心技术,被广泛应用于计算机视觉、自然语言处理、自动驾驶等领域。然而,大多数深度学习框架,如。ONNX(Open Neural Network Exchange)允许在 C++ 中加载。(如 TensorFlow C++ API, PyTorch C++ API),可以加载已训练的模型进行推理。为主,但在高性能计算、嵌入式设备和生产环境中,深度学习(Deep Learning)已经成为。(不
C++ 中的深度学习框架实现
1. 引言
深度学习(Deep Learning)已经成为人工智能领域的核心技术,被广泛应用于计算机视觉、自然语言处理、自动驾驶等领域。然而,大多数深度学习框架,如 TensorFlow、PyTorch,主要以 Python 为主,但在高性能计算、嵌入式设备和生产环境中,C++ 深度学习框架 具有以下优势:
- 高效执行:C++ 具有更快的计算速度,适用于 大规模推理任务。
- 低层次优化:可以直接控制 内存、计算图优化、GPU 加速。
- 嵌入式 & 工业应用:适用于 机器人、自动驾驶、边缘 AI 设备。
本指南将介绍:
✅ C++ 现有的深度学习框架(如 TensorFlow C++ API, PyTorch C++ API)
✅ 如何用 C++ 实现基础神经网络(手写神经网络 + 计算图)
✅ C++ 深度学习框架的性能优化(多线程 + GPU 加速)
✅ 适用于生产环境的深度学习推理引擎(ONNX, TensorRT)
2. C++ 主要深度学习框架
目前,C++ 支持的深度学习框架主要包括:
| 框架 | 特点 | 适用场景 |
|---|---|---|
| TensorFlow C++ API | 支持训练 & 推理,可与 Python 互操作 | 大规模生产部署 |
| PyTorch C++ API (LibTorch) | 适用于 C++ 端的推理,训练支持较少 | 模型推理 & 部署 |
| ONNX Runtime | 兼容 TensorFlow/PyTorch/ONNX,跨平台 | 高效模型推理 |
| Caffe | 经典 CNN 框架,C++ 友好 | 图像识别 & 旧项目 |
| TensorRT | NVIDIA GPU 优化,推理速度极快 | GPU 部署 |
| Eigen/DLib | 轻量级数学库,可实现自定义神经网络 | 小型 AI 项目 |
3. C++ 实现简单神经网络
我们先手写一个简单的神经网络(不依赖任何框架),以了解神经网络的基本原理。
3.1 神经网络架构
- 输入层:接受数据(如图像像素)
- 隐藏层:执行计算(矩阵乘法 + 激活函数)
- 输出层:生成最终预测(Softmax)
#include <iostream>
#include <vector>
#include <cmath>
#include <cstdlib>
using namespace std;
// Sigmoid 激活函数
double sigmoid(double x) {
return 1.0 / (1.0 + exp(-x));
}
// 计算神经元输出
double neuron_output(const vector<double>& inputs, const vector<double>& weights, double bias) {
double sum = bias;
for (size_t i = 0; i < inputs.size(); i++) {
sum += inputs[i] * weights[i];
}
return sigmoid(sum);
}
// 神经网络前向传播
vector<double> forward_pass(const vector<double>& inputs, const vector<vector<double>>& weights, const vector<double>& biases) {
vector<double> outputs;
for (size_t i = 0; i < weights.size(); i++) {
outputs.push_back(neuron_output(inputs, weights[i], biases[i]));
}
return outputs;
}
int main() {
// 初始化输入 & 权重 & 偏置
vector<double> inputs = {0.5, 0.3}; // 输入数据
vector<vector<double>> weights = {{0.8, 0.2}, {0.4, 0.9}}; // 2 个神经元
vector<double> biases = {0.1, -0.3};
vector<double> outputs = forward_pass(inputs, weights, biases);
cout << "神经网络输出: ";
for (double output : outputs) {
cout << output << " ";
}
cout << endl;
return 0;
}
✅ 运行示例:
神经网络输出: 0.689974 0.645656
🔹 改进点:
- 增加 更多层数,让网络更深
- 使用 ReLU 激活函数 提高非线性能力
- 采用 梯度下降 进行训练
4. 使用 TensorFlow C++ API 进行推理
TensorFlow 提供 C++ API,可以加载已训练的模型进行推理。以下示例演示如何在 C++ 中加载 .pb 模型进行预测。
4.1 安装 TensorFlow C++ API
- 下载 TensorFlow C++ 预编译库:
sudo apt-get install libtensorflow-dev - 编写 CMakeLists.txt:
cmake_minimum_required(VERSION 3.10) project(TensorFlowCPP) find_package(TensorFlow REQUIRED) add_executable(tf_inference main.cpp) target_link_libraries(tf_inference TensorFlow::TensorFlow)
4.2 C++ 加载 TensorFlow 模型
#include <tensorflow/core/public/session.h>
#include <tensorflow/core/platform/env.h>
#include <iostream>
using namespace tensorflow;
using namespace std;
int main() {
// 加载 TensorFlow 模型
Session* session;
Status status = NewSession(SessionOptions(), &session);
if (!status.ok()) {
cerr << "无法创建 TensorFlow 会话: " << status.ToString() << endl;
return 1;
}
GraphDef graph_def;
status = ReadBinaryProto(Env::Default(), "model.pb", &graph_def);
if (!status.ok()) {
cerr << "加载模型失败: " << status.ToString() << endl;
return 1;
}
status = session->Create(graph_def);
if (!status.ok()) {
cerr << "模型加载失败: " << status.ToString() << endl;
return 1;
}
// 运行推理
Tensor input(DT_FLOAT, TensorShape({1, 10})); // 假设输入为 10 维向量
auto input_map = input.flat<float>();
for (int i = 0; i < 10; i++) {
input_map(i) = 0.5;
}
vector<pair<string, Tensor>> inputs = {{"input_tensor", input}};
vector<Tensor> outputs;
status = session->Run(inputs, {"output_tensor"}, {}, &outputs);
if (!status.ok()) {
cerr << "推理失败: " << status.ToString() << endl;
return 1;
}
cout << "预测结果: " << outputs[0].matrix<float>()(0, 0) << endl;
session->Close();
return 0;
}
✅ 适用场景:
- 在 生产环境 部署训练好的深度学习模型
- 在 嵌入式系统、自动驾驶、边缘 AI 中进行高性能推理
- C++ + TensorFlow 适用于 高并发大规模 AI 服务器
5. 使用 ONNX 进行跨框架推理
ONNX(Open Neural Network Exchange)允许在 C++ 中加载 TensorFlow / PyTorch / ONNX 训练的模型进行推理。
#include <onnxruntime/core/providers/cpu/cpu_provider_factory.h>
#include <onnxruntime/core/session/onnxruntime_cxx_api.h>
int main() {
Ort::Env env(ORT_LOGGING_LEVEL_WARNING, "ONNXRuntime");
Ort::Session session(env, "model.onnx", Ort::SessionOptions{nullptr});
// 加载输入数据
Ort::Value input_tensor = Ort::Value::CreateTensor<float>(
memory_info, input_data, 10, input_shape.data(), input_shape.size());
std::vector<Ort::Value> output_tensors = session.Run(
Ort::RunOptions{nullptr}, input_names.data(), &input_tensor, 1, output_names.data(), 1);
cout << "ONNX 预测结果: " << output_tensors[0].GetTensorMutableData<float>()[0] << endl;
return 0;
}
✅ 优点:
- 支持 TensorFlow/PyTorch 训练的模型
- 优化推理速度
- 适用于 C++ 生产环境
6. 总结
🚀 C++ 深度学习关键技术
✅ 手写神经网络,理解核心原理
✅ 使用 TensorFlow C++ API 进行推理
✅ ONNX 兼容多个框架,实现高效推理
✅ 高性能部署(CUDA、TensorRT)
💡 C++ 是深度学习工程化、工业级 AI 解决方案的最佳选择! 🎯🔥
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)