1. 准备Ubuntu开发环境
在开始前,确保Ubuntu系统已更新并安装基础开发工具:
sudo apt update && sudo apt upgrade -y
sudo apt install build-essential cmake git -y
这些工具是编译C++项目和链接机器学习库的必备组件。
2. 选择并安装C++机器学习库
Ubuntu上常用的C++机器学习库各有侧重,可根据需求选择:
sudo apt install libdlib-dev -y
sudo apt install libmlpack-dev -y
sudo apt install libshark-dev -y
sudo apt install libopencv-dev -y
git clone https://github.com/facebookresearch/flashlight.git
cd flashlight && mkdir build && cd build
cmake .. && make -j$(nproc) && sudo make install
3. 配置C++项目构建系统
使用CMake管理项目依赖和编译流程,创建项目目录结构:
my_ml_project/
├── CMakeLists.txt
└── main.cpp
cmake_minimum_required(VERSION 3.10)
project(MyMLProject)
set(CMAKE_CXX_STANDARD 17) # C++17及以上是多数C++ ML库的要求
# 查找Dlib库
find_package(Dlib REQUIRED)
# 添加可执行文件
add_executable(MyMLProject main.cpp)
# 链接Dlib库
target_link_libraries(MyMLProject Dlib::Dlib)
cmake_minimum_required(VERSION 3.10)
project(MyMLProject)
set(CMAKE_CXX_STANDARD 17)
# 查找Flashlight库
find_package(Flashlight REQUIRED)
# 添加可执行文件
add_executable(MyMLProject main.cpp)
# 链接Flashlight库
target_link_libraries(MyMLProject PRIVATE flashlight::fl)
通过cmake ..生成Makefile,再用make编译项目。
4. 编写C++机器学习代码
#include <dlib/svm.h>
#include <dlib/data_io.h>
#include <iostream>
int main() {
// 生成示例数据(x: 1-10, y: 2x+3)
dlib::matrix<double> x(10, 1), y(10, 1);
for (int i = 0; i < 10; ++i) {
x(i, 0) = i + 1;
y(i, 0) = 2 * (i + 1) + 3;
}
// 定义线性回归模型(使用最小二乘法)
dlib::linear_regression_trainer<dlib::matrix<double>> trainer;
auto model = trainer.train(x, y);
// 预测x=11时的y值
dlib::matrix<double> pred = model(x(9)); // 输入最后一个样本
std::cout << "Predicted y for x=11: " << pred(0, 0) << std::endl;
return 0;
}
#include <tensorflow/cc/saved_model/loader.h>
#include <tensorflow/cc/saved_model/tag_constants.h>
#include <iostream>
int main() {
// 加载预训练模型(替换为实际路径)
tensorflow::Saved_model::SessionBundle bundle;
tensorflow::Status status = tensorflow::saved_model::LoadSavedModel(
tensorflow::SessionOptions(),
tensorflow::RunOptions(),
"/path/to/saved_model",
{tensorflow::kSavedModelTagServe},
&bundle);
if (!status.ok()) {
std::cerr << "Failed to load model: " << status.ToString() << std::endl;
return 1;
}
// 准备输入张量(替换为实际输入维度)
tensorflow::Tensor input(tensorflow::DT_FLOAT, tensorflow::TensorShape({1, 224, 224, 3}));
// ...填充输入数据(如图像像素)
// 运行模型推理
std::vector<tensorflow::Tensor> outputs;
status = bundle.session->Run({{"input_layer", input}}, {"output_layer"}, {}, &outputs);
if (!status.ok()) {
std::cerr << "Inference failed: " << status.ToString() << std::endl;
return 1;
}
// 输出预测结果
std::cout << "Prediction: " << outputs[0].DebugString() << std::endl;
return 0;
}
注意:TensorFlow C++ API需提前将Python模型转换为SavedModel格式(使用tf.saved_model.save)。5. 编译与运行项目
mkdir build && cd build
cmake ..
make
若使用TensorFlow C++ API,需添加头文件路径和库路径:g++ -std=c++11 main.cpp -o ml_example -I/usr/local/include/tensorflow -ltensorflow_cc -ltensorflow_framework
./build/MyMLProject # 或 ./ml_example(TensorFlow示例)
输出结果(如Dlib线性回归的预测值、TensorFlow模型的分类概率)。6. 进阶优化建议
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda)。gprof(g++ -pg编译)或Valgrind分析代码性能,优化瓶颈(如矩阵运算、内存访问)。