Machine Learning in C++: Libraries and Tools for Development
Although Python is the dominant language in the field of machine learning (ML), C++ remains indispensable for production systems where performance, low latency, and memory control are critical. Embedded systems, computer vision, robotics, high-load servers — here C++ provides maximum efficiency. In this article, we will review key libraries and tools for machine learning in C++: from classical algorithms to deep neural networks.
Why C++ for Machine Learning?
C++ allows you to:
- Achieve maximum computation speed through close access to hardware.
- Efficiently manage memory (RAII, smart pointers, memory pools).
- Integrate with existing low-level systems (drivers, microcontrollers, games).
- Use SIMD instructions and parallel computing (OpenMP, MPI, CUDA).
However, development in C++ requires more attention to detail and time. Fortunately, there are several powerful libraries that simplify this task.
1. TensorFlow C++ API
TensorFlow is one of the most popular platforms for deep learning. Its C++ API allows you to load and run models trained in Python, as well as create and train your own models directly from C++.
Key features:
- Full support for computation graphs and automatic differentiation.
- Optimization for CPU and GPU (CUDA).
- Support for TF Lite for mobile and embedded devices.
- Integration with Eigen for linear algebra.
Example: loading and running a trained model
#include <tensorflow/core/public/session.h>#include <tensorflow/core/platform/env.h>
using namespace tensorflow;
int main() { // Loading the model from a file Session* session; NewSession(SessionOptions(), &session); GraphDef graph_def; Status status = ReadBinaryProto(Env::Default(), "model.pb", &graph_def); if (!status.ok()) { return 1; } session->Create(graph_def);
// Preparing input data (example: 1x3 matrix) Tensor input(DT_FLOAT, TensorShape({1, 3})); auto input_map = input.matrix<float>(); input_map(0, 0) = 1.0f; input_map(0, 1) = 2.0f; input_map(0, 2) = 3.0f;
// Running computations std::vector<Tensor> outputs; session->Run({{"input_tensor", input}}, {"output_tensor"}, {}, &outputs);
// Outputting the result auto output_map = outputs[0].matrix<float>(); std::cout << "Result: " << output_map(0, 0) << std::endl;
delete session; return 0;}When to use: when you need to run deep learning models in a production environment where Python is too slow or unavailable.
2. Dlib
Dlib is a modern C++ library focused on computer vision and machine learning. It includes both classical algorithms (SVM, k-means) and deep learning.
Key features:
- Ready-made implementation of face detection, object tracking, and regression.
- Its own framework for deep neural networks (based on tensors).
- Optimized algorithms for classification and clustering tasks.
- Integration with OpenCV.
Example: training an SVM in C++ with Dlib
#include <dlib/svm.h>#include <iostream>
using namespace dlib;
int main() { // Kernel type: RBF typedef radial_basis_kernel<matrix<double, 2, 1>> kernel_type; svm_c_trainer<kernel_type> trainer;
// Training data std::vector<matr