介绍和动机——为什么选择 C++
C++ 非常适合 动态负载平衡、 自适应缓存以及开发大型大数据框架 和库。Google 的MapReduce、MongoDB以及 下面列出 的大多数 深度学习库都是使用 C++ 实现的。 Scylla 以其 超低延迟 和 极高 吞吐量而闻名,它 使用 C++ 进行编码,作为 Apache Cassandra 和 Amazon DynamoDB的替代品。
凭借 C++ 作为编程语言的 一些独特优势(包括内存管理、 性能特征和 系统编程),它无疑是开发快速可扩展的数据科学和大数据库的最有效工具之一。
此外, Julia (一种 由MIT开发的编译型 和 交互式 语言)正在成为 Python 在科学计算和数据处理领域的潜在竞争对手。它的快速处理速度、并行性、静态以及用于插入库的动态类型和 C++ 绑定,简化了开发人员/数据科学家集成和使用 C++ 作为数据科学和大数据库的工作。
让我们仔细研究一下不同的 C++ 库,这些库对于传统和深度学习模型的每位数据科学家来说都很有用。
1.来自 Google AI 的 TensorFlow
由 Google 开发的流行深度学习库,拥有自己的工具、库和社区资源生态系统,可让研究人员和开发人员轻松构建和部署基于 ML 的应用程序
https://www.tensorflow.org/lite/microcontrollers/libraryhttps://github.com/tensorflow/serving
2.来自伯克利的 Caffe
用于快速特征嵌入或 Caffe 的卷积架构是用 C++ 编写的,用于深度学习框架,由伯克利视觉和学习中心开发。
https://github.com/intel/caffe
3.微软认知工具包(CNTK)
Microsoft Cognitive Toolkit 是一个统一的深度学习工具包,有助于通过有向图将神经网络转换为一系列计算步骤。
4.mlpack 库
mlpack:它是一个快速、灵活的机器学习库,用 C++ 编写。它提供了具有 Python 绑定、Julia 绑定和 C++ 类的尖端机器学习算法。
5.DyNet
Dynamic Neural Network Toolkit (支持动态计算图)或 DyNet 是一个用 C++(在 Python 中绑定)编写的高性能神经网络库,可在 CPU 或 GPU 上高效运行。它支持自然语言处理、图结构、强化学习等。
6.Shogun
Shogun 是一个开源机器学习库,它提供了广泛的高效和统一的机器学习方法,例如多种数据表示、算法类和通用工具的组合,用于数据管道的快速原型设计。
7. FANN
快速人工神经 网络 是 C 语言中的多层人工神经网络,支持全连接和稀疏连接网络。它支持定点和浮点的跨平台执行。此外,它还支持进化的基于拓扑的训练和基于反向传播的 DL 模型训练。
8.OpenNN
开放神经网络 (OpenNN) 是用于高级分析的开源 (C/C++) 神经网络高性能库,支持分类、回归、预测等。
9.SHARK Library
Shark 是一个快速、模块化、通用的开源机器学习库 (C/C++),用于应用和研究,支持线性和非线性优化、基于内核的学习算法、神经网络和各种其他机器学习技术。
10. Armadillo
Armadillo 是一个线性代数 (C/C++) 库,其功能类似于 Matlab。该库以将研究代码快速转换为生产环境而闻名,用于模式识别、计算机视觉、信号处理、生物信息学、统计学、计量经济学等。
11.Faisis
faiss:这个库(C/C++)用于高效的相似性搜索和密集向量的聚类。它包含在任意大小的向量集中搜索的算法,直到那些可能不适合 RAM 的向量。它还支持通过 CUDA 提供的可选 GPU,以及可选的 Python 接口。
12.随机森林
https://github.com/zhufangzhou/RandomForest
https://github.com/bjoern-andres/random-forest
13.Boosting
XGBoost – 一个并行优化的通用梯度提升库。
ThunderGBM – GPU 上用于 GBDT 和随机森林的快速库。
LightGBM—— 微软基于决策树算法的快速、分布式、高性能梯度提升(GBDT、GBRT、GBM 或 MART)框架,用于排名、分类和许多其他机器学习任务。
CatBoost – 具有开箱即用的分类特征支持的决策树库的通用梯度提升。它易于安装,包含快速推理实现,并支持 CPU 和 GPU(甚至多 GPU)计算。
14.推荐系统
Recommender – 使用协同过滤 (CF) 的产品推荐/建议的 AC 库。
混合推荐系统 ——基于 scikit-learn 算法的混合推荐系统
15.自然语言处理
BLLIP Parser – BLLIP 自然语言解析器(也称为 Charniak-Johnson 解析器)。
colibri-core – C++ 库、命令行工具和 Python 绑定,用于以快速且节省内存的方式提取和处理基本语言结构,例如 n-gram 和skiagram。
CRF++ – 条件随机场 (CRF) 的开源实现,用于分割/标记顺序数据和其他自然语言处理任务。[已弃用]
CRFsuite – CRFsuite 是用于标记顺序数据的条件随机字段 (CRF) 的实现。[已弃用]
CRF 模型 -不同的基于深度学习的 CRF models.frog - 为荷兰语开发的基于内存的 NLP 套件:PoS 标记器、词形还原器、依赖解析器、NER、浅解析器、形态分析器。
MeTA – ModErn Text Analysis 是一个 C++ 数据科学工具包,可促进大文本数据的挖掘,包括文本标记化,包括解析树、主题模型、分类算法、图形算法、语言模型、多线程算法等深度语义特征。
MIT Information Extraction Toolkit – 用于命名实体识别和关系提取的 C、C++ 和 Python 工具
ucto – Unicode 感知的基于正则表达式的各种语言的标记器。工具和 C++ 库。支持 FoLiA 格式。
16.流的数据挖掘
StreamDM :对挖掘大数据流很有用,它支持以下算法
SGD 学习器和感知器:
- Naive Bayes
- CluStream
- Hoeffding Decision Trees
- Bagging
- Stream KM++
- Data Generators
HyperplaneGenerator
- RandomTreeGenerator
- RandomRBFGenerator
- RandomRBFEventsGenerato
17.数据结构/图/动态规划算法
https://github.com/TheAlgorithms/C-Plus-Plus
18.通用机器学习
Darknet – Darknet 是一个用 C 和 CUDA 编写的开源神经网络框架,支持 CPU 和 GPU 计算。
cONNXr – ONNX 运行时是用纯 C (99) 编写的,零依赖于小型嵌入式设备。无论您使用哪种框架进行训练,都可以对您的机器学习模型进行推理。易于在任何地方安装和编译,即使在非常旧的设备中也是如此。
BanditLib – 一个简单的多臂 Bandit 库。 [已弃用]
CUDA – 这是卷积深度学习的快速 C++/CUDA 实现
DeepDetect – 用 C++11 编写的机器学习 API 和服务器。它使最先进的机器学习易于使用并集成到现有应用程序中。
分布式机器学习工具包 (DMTK) – Microsoft 的分布式机器学习(参数服务器)框架。启用跨多台机器的大型数据集训练模型。当前与之捆绑的工具包括:LightLDA 和分布式(Multisense)词嵌入。
DLib – 一套 ML 工具,旨在轻松嵌入其他应用程序。
DSSTNE – 亚马逊创建的一个软件库,用于使用 GPU 训练和部署深度神经网络,强调速度和规模而不是实验灵活性。
DyNet – 一个动态神经网络库,可以很好地与具有随每个训练实例变化的动态结构的网络一起工作。用 C++ 编写,在 Python 中绑定。
Fido – 用于嵌入式电子和机器人技术的高度模块化 C++ 机器学习库。
igraph - 通用图形库。
Intel(R) DAAL – 由英特尔开发并针对英特尔架构进行了优化的高性能软件库。库为数据分析的所有阶段提供算法构建块,并允许以批处理、在线和分布式模式处理数据。
libfm – 一种通用方法,允许通过特征工程模拟大多数分解模型。
MLDB—— 机器学习数据库是专为机器学习而设计的数据库。通过 RESTful API 向其发送命令以存储数据,使用 SQL 进行探索,然后训练机器学习模型,并将它们作为 API 公开。
mlpack – 一个可扩展的 C++ 机器学习库。
MXNet – 轻量级、便携、灵活的分布式/移动深度学习,具有动态、突变感知数据流 Dep 调度器;适用于 Python、R、Julia、Go、Javascript 等。
proNet-core – 通用网络嵌入框架:成对表示优化网络编辑。
PyCUDA – CUDA 的 Python 接口
ROOT – 一个模块化的科学软件框架。它提供了处理大数据处理、统计分析、可视化和存储所需的所有功能。
Shark – 一个快速、模块化、功能丰富的开源 C++ 机器学习库。
Shogun – Shogun 机器学习工具箱。
sofia-ml – 快速增量算法套件。Stan – 一种概率编程语言,使用哈密顿蒙特卡罗采样实现完整的贝叶斯统计推断。
Timbl – 一个软件包/C++ 库,实现了几种基于内存的学习算法,其中 IB1-IG 是 k 最近邻分类的实现,IGTree 是 IB1-IG 的决策树近似。常用于自然语言处理。
Vowpal Wabbit (VW) – 一种快速的核外学习系统。Warp-CTC – 在 CPU 和 GPU 上快速并行实现连接主义时间分类 (CTC)。
ThunderSVM – GPU 和 CPU 上的快速 SVM 库。
LKYDeepNN – 一个只有头文件的 C++11 神经网络库。低依赖,原生繁体中文文档。
xLearn – 一个高性能、易于使用且可扩展的机器学习包,可用于解决大规模机器学习问题。xLearn 对于解决大规模稀疏数据上的机器学习问题特别有用,这在在线广告和推荐系统等互联网服务中非常常见。
Featuretools – 用于自动化特征工程的库。它擅长使用可重用的特征工程“原语”将事务和关系数据集转换为用于机器学习的特征矩阵。
skynet – 用于学习神经网络的库,具有 C 接口,网络设置为 JSON。用 C++ 编写,绑定了 Python、C++ 和 C#。
Feast – 用于管理、发现和访问机器学习功能的功能商店。Feast 为模型训练和模型服务提供了一致的特征数据视图。
Hopsworks – 具有业界首个开源功能存储的 AI 数据密集型平台。Hopsworks Feature Store 提供了一个基于 Apache Hive 的用于训练和批处理的特征仓库和一个基于 MySQL Cluster 的特征服务数据库,用于在线应用程序。
Polyaxon – 可重复和可扩展的机器学习和深度学习平台。
sara – C++ 计算机视觉库,具有易于理解和高效的计算机视觉算法实现。[Mozilla 公共许可证 2.0 版]
ANNetGPGPU – 基于 GPU (CUDA) 的人工神经网络库。[LGPL]
btsk – 游戏行为树入门工具包。[zlib]
Evolving Objects – 一个基于模板的 ANSI-C++ 进化计算库,可帮助您快速编写自己的随机优化算法。[LGPL]
frugally-deep – 仅用于在 C++ 中使用 Keras 模型的标头库。[麻省理工学院]
Genann - C 中的简单神经网络库。 [zlib]
MXNet – 轻量级、便携、灵活的分布式/移动深度学习,具有动态、突变感知数据流 Dep 调度器;适用于 Python、R、Julia、Scala、Go、Javascript 等。
PyTorch – Python 中的张量和动态神经网络,具有强大的 GPU 加速功能。
website Recast/Detour – (3D) 导航网格生成器和探路者,主要用于游戏。[zlib]
tiny-dnn – C++11 中的仅标头、无依赖的深度学习框架。[BSD]
Veles – 用于快速深度学习应用程序开发的分布式平台。[阿帕奇]
Kaldi – 语音识别工具包。[阿帕奇]
19.计算机视觉
CCV – 基于 C/缓存/核心的计算机视觉库,现代计算机视觉库。
VLFeat – VLFeat 是一个开放且可移植的计算机视觉算法库,它具有 Matlab 工具箱。
DLib – DLib 具有用于人脸检测和训练通用对象检测器的 C++ 和 Python 接口。
EBLearn – Eblearn 是一个面向对象的 C++ 库,可实现各种机器学习模型 [已弃用]
OpenCV – OpenCV 具有 C++、C、Python、Java 和 MATLAB 接口,并支持 Windows、Linux、Android 和 Mac OS。
VIGRA – VIGRA 是一个通用的跨平台 C++ 计算机视觉和机器学习库,用于与 Python 绑定的任意维度卷。
Openpose - 用于身体、面部、手部和足部估计的实时多人关键点检测库。来自 Facebook 研究的手电筒。
20.来自 Facebook Research 的 FlashLight
flashlight 是一个快速、灵活的机器学习库,由 Facebook AI Research Speech 团队和 Torch 和 Deep Speech 的创建者完全用 C++ 编写。
21.来自阿里巴巴的移动神经网络
MNN 是一个高效、轻量级的深度学习框架。它支持深度学习模型的推理和训练,并具有行业领先的设备推理和训练性能。
22.来自 Facebook Research 的 Habitat-SIM
habitat-sim (C++) 库支持在高度逼真和高效的3D 模拟器 中训练具身 AI 代理(虚拟机器人),然后将学习到的技能转化为现实。它使用带有 AI 的静态数据集(例如ImageNet、COCO、VQA),其中代理通过从中学习在现实环境中行动。
参考
https://analyticsindiamag.com/top-10-libraries-in-c-c-for-machine-learning/
https://github.com/topics/ml?l=c%2B%2B
https://dzone.com/articles/progressive-tools10-best-frameworks-and-libraries