C++ 非常適合 動態負載平衡、 自適應快取以及開發大型巨量資料框架 和庫。Google 的MapReduce、MongoDB以及 下面列出 的大多數 深度學習庫都是使用 C++ 實現的。 Scylla 以其 超低延遲 和 極高 吞吐量而聞名,它 使用 C++ 進行編碼,作為 Apache Cassandra 和 Amazon DynamoDB的替代品。
憑藉 C++ 作為程式語言的 一些獨特優勢(包括記憶體管理、 效能特徵和 系統程式設計),它無疑是開發快速可延伸的資料科學和巨量資料庫的最有效工具之一。
此外, Julia (一種 由MIT開發的編譯型 和 互動式 語言)正在成為 Python 在科學計算和資料處理領域的潛在競爭對手。它的快速處理速度、並行性、靜態以及用於插入庫的動態型別和 C++ 繫結,簡化了開發人員/資料科學家整合和使用 C++ 作為資料科學和巨量資料庫的工作。
讓我們仔細研究一下不同的 C++ 庫,這些庫對於傳統和深度學習模型的每位資料科學家來說都很有用。
由 Google 開發的流行深度學習庫,擁有自己的工具、庫和社群資源生態系統,可讓研究人員和開發人員輕鬆構建和部署基於 ML 的應用程式
https://www.tensorflow.org/lite/microcontrollers/libraryhttps://github.com/tensorflow/serving
用於快速特徵嵌入或 Caffe 的折積架構是用 C++ 編寫的,用於深度學習框架,由伯克利視覺和學習中心開發。
https://github.com/intel/caffe
Microsoft Cognitive Toolkit 是一個統一的深度學習工具包,有助於通過有向圖將神經網路轉換為一系列計算步驟。
mlpack:它是一個快速、靈活的機器學習庫,用 C++ 編寫。它提供了具有 Python 繫結、Julia 繫結和 C++ 類的尖端機器學習演演算法。
Dynamic Neural Network Toolkit (支援動態計算圖)或 DyNet 是一個用 C++(在 Python 中繫結)編寫的高效能神經網路庫,可在 CPU 或 GPU 上高效執行。它支援自然語言處理、圖結構、強化學習等。
Shogun 是一個開源機器學習庫,它提供了廣泛的高效和統一的機器學習方法,例如多種資料表示、演演算法類和通用工具的組合,用於資料管道的快速原型設計。
快速人工神經 網路 是 C 語言中的多層人工神經網路,支援全連線和稀疏連線網路。它支援定點和浮點的跨平臺執行。此外,它還支援進化的基於拓撲的訓練和基於反向傳播的 DL 模型訓練。
開放神經網路 (OpenNN) 是用於高階分析的開源 (C/C++) 神經網路高效能庫,支援分類、迴歸、預測等。
Shark 是一個快速、模組化、通用的開源機器學習庫 (C/C++),用於應用和研究,支援線性和非線性優化、基於核心的學習演演算法、神經網路和各種其他機器學習技術。
Armadillo 是一個線性代數 (C/C++) 庫,其功能類似於 Matlab。該庫以將研究程式碼快速轉換為生產環境而聞名,用於圖形識別、計算機視覺、訊號處理、生物資訊學、統計學、計量經濟學等。
faiss:這個庫(C/C++)用於高效的相似性搜尋和密集向量的聚類。它包含在任意大小的向量集中搜尋的演演算法,直到那些可能不適合 RAM 的向量。它還支援通過 CUDA 提供的可選 GPU,以及可選的 Python 介面。
https://github.com/zhufangzhou/RandomForest
https://github.com/bjoern-andres/random-forest
XGBoost – 一個並行優化的通用梯度提升庫。
ThunderGBM – GPU 上用於 GBDT 和隨機森林的快速庫。
LightGBM—— 微軟基於決策樹演演算法的快速、分散式、高效能梯度提升(GBDT、GBRT、GBM 或 MART)框架,用於排名、分類和許多其他機器學習任務。
CatBoost – 具有開箱即用的分類特徵支援的決策樹庫的通用梯度提升。它易於安裝,包含快速推理實現,並支援 CPU 和 GPU(甚至多 GPU)計算。
Recommender – 使用協同過濾 (CF) 的產品推薦/建議的 AC 庫。
混合推薦系統 ——基於 scikit-learn 演演算法的混合推薦系統
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 格式。
StreamDM :對挖掘巨量資料流很有用,它支援以下演演算法
SGD 學習器和感知器:
HyperplaneGenerator
https://github.com/TheAlgorithms/C-Plus-Plus
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 – 語音識別工具包。[阿帕奇]
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 研究的手電筒。
flashlight 是一個快速、靈活的機器學習庫,由 Facebook AI Research Speech 團隊和 Torch 和 Deep Speech 的建立者完全用 C++ 編寫。
MNN 是一個高效、輕量級的深度學習框架。它支援深度學習模型的推理和訓練,並具有行業領先的裝置推理和訓練效能。
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