东方耀AI技术分享

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 1882|回复: 0
打印 上一主题 下一主题

[课堂笔记] C++常用机器学习与深度学习库

[复制链接]

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14439
QQ
跳转到指定楼层
楼主
发表于 2021-11-24 11:04:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C++常用机器学习与深度学习库




涉及的库主要是机器学习、矩阵计算、计算结果显示。

针对自己的技术积累,做好选择!

python栈: numpy pyArmadillo scipy pandas matplotlib   pytorch  opencv

c++ 栈:  Armadillo矩阵与信号处理  kfrlib  opencv libtorch Matplotlibcpp


技术生态 还是 pytorch比较活跃   移植c++用 libtorch也可GPU训练

以一个小项目贯穿


Shogun、Shark、Dlib、Mlpack、Libtorch、Opencv、Armadillo、Eigen3、Xtensor、Fast-cpp-csv-parser、Rapidjson、Plotcpp、matplotlibcpp、mathGL等


一、侧重机器学习算法
1、Shogun
Shogun是开放源代码的机器学习库,它提供了多种高效且统一的机器学习方法。


Shogun支持多种语言(Python,Octave,R,Java / Scala,Lua,C#,Ruby等)和平台(Linux / Unix,MacOS和Windows),并与它们的科学计算环境集成。


   Shogun是C ++中最先进的


高效实现(从标准到最先进的算法),现代软件体系结构。


   多种数据表示,算法类和通用工具的轻松组合,可用于快速构建数据管道原型。


   Shogun是开源的免费软件,基于社区的开发和机器学习教育。


   GPLv3许可证并致力于BSD兼容性。


https://www.shogun-toolbox.org/


2、Shark
Shark是一个快速,模块化,功能丰富的开源C ++机器学习库。


   它提供了用于线性和非线性优化的方法,基于核的学习算法,神经网络以及其他各种机器学习技术。 它是现实应用和研究的强大工具箱。  Shark可在Windows,MacOS X和Linux上运行。 它带有大量的文档。  Shark是根据GNU较宽松通用公共许可证获得许可的。


速度和灵活性


Shark一方面在灵活性和易用性以及另一方面在计算效率之间提供了极好的折衷方案。


    Shark提供了来自各种机器学习和计算智能领域的众多算法,并且可以轻松组合和扩展它们。


    独特的功能Shark附带了许多强大的算法,据我们所知,这些算法在其他任何库中都没有实现,例如,在模型选择和二进制和多类SVM的训练领域,或演化的单目标和多目标优化领域 。


http://www.shark-ml.org/


http://www.shark-ml.org/sphinx_pages/build/html/rest_sources/tutorials/tutorials.html


3、Dlib
Dlib是一个现代的C ++工具箱,其中包含机器学习算法和工具,这些工具和工具可以用C ++创建复杂的软件来解决实际问题。 它在工业和学术界广泛使用,包括机器人技术,嵌入式设备,移动电话和大型高性能计算环境。  Dlib的开源许可使您可以免费在任何应用程序中使用它。


Dlib包含各种机器学习算法。 所有这些都设计为高度模块化,易于执行且通过干净现代的C ++ API易于使用。 它被广泛用于机器人,嵌入式设备,移动电话和大型高性能计算环境中。


http://dlib.net/


https://github.com/davisking/dlib


4、Mlpack
mlpack 是一个C++的机器学习库,它重点在于其扩展性、高速性和易用性。它的目的是让新用户通过简单、一致的API使用机器学习,同时为专业用户提供C++的高性能和最大灵活性。他的性能超出大量类似的机器学习库,如WEKA、Shogun、MATLAB、mlpy及sklearn,这一对比工作可以参考文献。


mlpack含有丰富的文档和教程,可以参考项目主页。教程中包含的算法有:近邻搜索(NeighborSearch)、范围搜索(RangeSearch)、线性回归(LinearRegression)、欧几里德最小生成树(The Euclidean Minimum Spanning Tree)、K-均值(K-Means)、FastMKS(Fast max-kernel search)等。


mlpack提供了大量的类或API供程序调用,同时还提供了很多可执行程序供不懂C++的用户使用。这些可执行文件包括:allkfn, allknn, emst, gmm, hmm_train, hmm_loglik, hmm_viterbi, hmm_generate, kernel_pca, kmeans, lars, linear_regression, local_coordinate_coding, mvu, nbc, nca, pca, radical, sparse_coding。


https://www.mlpack.org/


5、Libtorch
Libtorch是PyTorch的 C ++前端,是PyTorch机器学习框架的纯C ++接口。 虽然PyTorch的主要接口自然是Python,但此Python API位于大量的C ++代码库之上,提供基本的数据结构和功能,例如张量和自动微分。  C ++前端公开了纯C ++ 11 API,该API使用机器学习训练和推理所需的工具扩展了此基础C ++代码库。 这包括用于神经网络建模的通用组件的内置集合; 使用自定义模块扩展此集合的API; 一个流行的优化算法库,例如随机梯度下降; 具有API的并行数据加载器,用于定义和加载数据集; 序列化例程等。


https://pytorch.org/tutorials/advanced/cpp_frontend.html


https://github.com/pytorch/pytorch


6、Opencv
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 [1]  它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。


OpenCV 是由很多模块组成的,这些模块可以分成很多层:


最底层是基于硬件加速层(HAL)的各种硬件优化。


再上一层是 opencv_contrib 模块所包含的 OpenCV 由其他开发人员所贡献的代码,其包含大多数高层级的函数功能。这就是OpenCV的核心。接下来是语言绑定和示例应用程序。处于最上层的是 OpenCV 和操作系统的交互。


Opencv的多模块包括:核心功能模块、图像处理模块、2D功能模块、高层gui图形用户界面、机器学习模块、3D校准模块、目标探测模块、快速最邻近模块、GPU模块、图像模块、拼接模块等。


https://opencv.org/


二、矩阵、数据处理相关
7、Armadillo
Armadillo是用于C ++语言的高质量线性代数库(矩阵数学),旨在在速度和易用性之间取得良好的平衡。提供类似于Matlab的高级语法和功能,可用于直接在C ++中进行算法开发或快速转换 生产环境中的研究代码(例如软件和硬件产品)为向量,矩阵和立方体(一阶,二阶和三阶张量)提供有效的类; 支持稠密和稀疏矩阵支持整数,浮点和复数通过与LAPACK或其高性能替代产品之一集成(例如,多线程Intel MKL或OpenBLAS),可以提供各种矩阵分解。 评估程序(基于模板元编程)自动组合多个操作以提高速度和效率可以自动使用OpenMP多线程(并行化)来加速计算量大的操作在许可许可下提供,对开源和专有(关闭)均有用 -source)软件可用于机器学习,模式识别,计算机视觉,信号处理,生物信息学,统计,财务等。


http://arma.sourceforge.net/


8、Eigen3
Eigen 是C++语言里的一个开源模版库,支持线性代数运算,矩阵和矢量运算,数值分析及其相关的算法。


Eigen只包含头文件,因此它不需要实现编译(只需要使用#include),指定好Eigen的头文件路径,编译项目即可。


为了应对不同的需求,Eigen库被分为多个功能模块,每个模块都有自己相对应的头文件,以供调用。 其中,Dense模块整合了绝大部分的模块,而Eigen模块更是整合了所有模块(也就是整个Eigen库)


http://eigen.tuxfamily.org/index.php?title=Main_Page


https://gitlab.com/libeigen/eigen


9、Xtensor
Xtensor是支持广播和惰性计算的多维数组算法库。


    xtensor是一个C ++库,用于使用多维数组表达式进行数值分析。


    xtensor提供了一个可扩展的表达系统,可实现延迟广播。


   遵循C ++标准库惯用法的API。


   操纵数组表达式并在xtensor上构建的工具。


   xtensor的容器受到Python数组编程库NumPy的启发。 可以很容易地编写将现有数据结构插入到我们的表达式系统中的适配器。


    实际上,xtensor可用于使用Python的缓冲区协议就地处理NumPy数据结构。 同样,我们可以对Julia和R数组进行操作。 有关NumPy,Julia和R绑定的更多详细信息,请分别检查xtensor-python,xtensor-julia和xtensor-r项目。


xtensor需要支持C ++ 14的现代C ++编译器。 支持以下C ++编译器:


xtensor-blas是xtensor库的扩展,通过FLENS项目中的cxxblas和cxxlapack提供对BLAS和LAPACK库的绑定。


    xtensor-blas当前在xt :: linalg命名空间中提供非广播的dot,norm(矢量的1和2范数),inverse,solve,eig,cross,det,slogdet,matrix_rank,inv,cholesky,qr,svd  (检查相应的xlinalg.hpp标头中的功能签名)。 函数和签名试图与NumPy一对一等效。  blas和lapack命名空间中还提供了与具有xtensor容器的BLAS或LAPACK进行接口连接的低级功能。


https://github.com/xtensor-stack/xtensor


https://github.com/xtensor-stack/xtensor-blas


10、Fast-cpp-csv-parser
这是一个小巧,易于使用且快速的仅包含头文件的库,用于读取逗号分隔值(CSV)文件。


    通过解析标题行自动重新排列列。


   磁盘I / O和CSV解析使用线程重叠以提高效率。


   可以使用模板在编译时启用和禁用诸如转义字符串之类的解析功能。 您只需为实际使用的功能付费。


   可以在合理的时间内读取多个GB文件。


   支持自定义列分隔符(即支持制表符分隔的值文件),引号转义的字符串,自动空格修剪。


   与* nix和Windows换行符一起使用,并自动忽略UTF-8 BOM。


   具有足够上下文的异常类可以格式化有用的错误消息。  what()返回准备显示给用户的错误消息。


https://github.com/ben-strasser/fast-cpp-csv-parser


11、Rapidjson
RapidJSON腾讯开源的针对是C ++的JSON解析器和生成器。 它的灵感来自RapidXml。


RapidJSON很小但是很完整。 它同时支持SAX和DOM样式API。  SAX解析器只有五千行代码。


    RapidJSON很快。 它的性能可以与strlen()媲美。 它还可选地支持SSE2 / SSE4.2进行加速。


    RapidJSON是自包含的并且仅标头。 它不依赖于外部库,例如BOOST。 它甚至不依赖于STL。


    RapidJSON是内存友好的。 对于大多数32/64位计算机,每个JSON值正好占据16个字节(不包括文本字符串)。 默认情况下,它使用快速内存​​分配器,并且解析器在解析期间紧凑地分配内存。


    RapidJSON是Unicode友好的。 它支持UTF-8,UTF-16,UTF-32(LE&BE),并在内部对其进行检测,验证和转码。 例如,您可以读取UTF-8文件,然后让RapidJSON将JSON字符串转码为DOM中的UTF-16。 它还支持代理和“ \ u0000”(空字符)。


https://github.com/Tencent/rapidjson/


三、计算结果显示相关
12、Plotcpp
这是用于gnuplot程序的轻量级C ++包装程序,旨在简化以二进制格式从C ++程序中绘制数据的过程。 现在,它仅支持gnuplot功能的一小部分,但允许将任何gnuplot命令作为字符串传递。


https://github.com/Kolkir/plotcpp


13、Matplotlibcpp
使用matplotlib-cpp,它可能是最简单的C ++绘图库。 它的构建类似于Matlab和matplotlib使用的绘图API。


matplotlib-cpp通过包装流行的python绘图库matplotlib来工作。  (matplotlib.org)这意味着您必须具有有效的python安装,包括头文件。


https://github.com/lava/matplotlib-cpp


14、mathgl
是一个在 Windows 和 Linux 下生成高质量图形的类库;用来根据大量的数组生成各种图表


可轻松嵌入到其他程序中;可生成各种各样的图表。


mathGL就是用来绘制一些统计图形的一个CPP的库, 实际上就是和gnuplot类似的一个C++的库,很适合科学计算的结果分析和统计,另外还有QT,python等支持的接口,只是在编译库的时候要加上相应的option,这个库用起来很好,减少了很多工作量,其核心调用方式就是使用一个函数指针.


在Linux和Windows下制作高质量科学图形的代码。 快速处理和绘制大型数据数组的代码。 用于在窗口和控制台机制中工作并易于包含到另一个程序中的代码。 具有大量图形和可更新图形的代码。 正是这样的代码,我试图放在MathGL库中。


在此版本(2.4.4)中,MathGL具有用于1d,2d和3d数据数组的50多种常规图形。 它可以将图形导出到位图和矢量(EPS或SVG)文件。 它具有OpenGL界面,可以从控制台程序使用。 它具有用于数据处理和脚本MGL语言的功能,以简化数据绘制。 它还具有多种类型的透明度和平滑的照明,矢量字体和类似TeX的符号解析,任意曲线坐标系以及许多其他有用的东西(请参阅首页的图片部分)。 最后,它是独立于平台且免费的(根据GPL v.2.0或更高版本的许可)。


MathGL可以绘制各种图形。 它包括:


一维(图,面积,条,步,茎,圆环,图,误差,管,标记,请参见一维图);


二维图(网格,冲浪,密度,连续,连续F,框,轴向,秋天,皮带,平铺,请参见2D图);


三维图(Surf3,Dens3,Cont3,ContF3,类云,请参见3D图);


双重数据图:矢量场Vect,流线流动,映射图Map,曲面和等值面,透明或彩色(即透明度或颜色变化),其他数据SurfA,SurfC,Surf3A,Surf3C(请参见双重绘图)。


http://mathgl.sourceforge.net/













让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|人工智能工程师的摇篮 ( 湘ICP备2020019608号-1 )

GMT+8, 2024-5-19 17:45 , Processed in 0.176030 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表