现在机器学习逐渐成为行业热门,经过二十几年的发展,机器学习目前也有了十分广泛的应用,如:数据挖掘、计算机视觉、自然语言处理、生物特征识别、搜索引擎、医学诊断、dna序列测序、语音和手写识别、战略游戏和机器人等方面。
云栖社区特意翻译整理了目前github上最受欢迎的28款开源的机器学习项目,以供开发者参考使用。
1. tensorflow
tensorflow 是谷歌发布的第二代机器学习系统。据谷歌宣称,在部分基准测试中,tensorflow的处理速度比第一代的distbelief加快了2倍之多。
具体的讲,tensorflow是一个利用数据流图(data flow graphs)进行数值计算的开源软件库:图中的节点( nodes)代表数学运算操作,同时图中的边(edges)表示节点之间相互流通的多维数组,即张量(tensors)。这种灵活的架构可以让使用者在多样化的将计算部署在台式机、服务器或者移动设备的一个或多个cpu上,而且无需重写代码;同时任一基于梯度的机器学习算法均可够借鉴tensorflow的自动分化(auto-differentiation);此外通过灵活的python接口,要在tensorflow中表达想法也变得更为简单。
tensorflow最初由google brain小组(该小组隶属于google's machine intelligence研究机构)的研究员和工程师开发出来的,开发目的是用于进行机器学习和深度神经网络的研究。但该系统的通用性足以使其广泛用于其他计算领域。
目前google 内部已在大量使用 ai 技术,包括 google app 的语音识别、gmail 的自动回复功能、google photos 的图片搜索等都在使用 tensorflow 。
开发语言:c++
许可协议:apache license 2.0
github项目地址:https://github.com/tensorflow/tensorflow
2. scikit-learn
scikit-learn是用于机器学习的python 模块,它建立在scipy之上。该项目由david cournapeau 于2007年创立,当时项目名为google summer of code,自此之后,众多志愿者都为此做出了贡献。
主要特点:
操作简单、高效的数据挖掘和数据分析
无访问限制,在任何情况下可重新使用
建立在numpy、scipy 和 matplotlib基础上
scikit-learn的基本功能主要被分为六个部分:分类、回归、聚类、数据降维、模型选择、数据预处理,具体可以参考官方网站上的文档。经过测试,scikit-learn可在 python 2.6、python 2.7 和 python 3.5上运行。除此之外,它也应该可在python 3.3和python 3.4上运行。
注:scikit-learn以前被称为scikits.learn。
开发语言:python
许可协议:3-clause bsd license
github项目地址:https://github.com/scikit-learn/scikit-learn
3.caffe
caffe 是由神经网络中的表达式、速度、及模块化产生的深度学习框架。后来它通过伯克利视觉与学习中心((bvlc)和社区参与者的贡献,得以发展形成了以一个伯克利主导,然后加之github和caffe-users邮件所组成的一个比较松散和自由的社区。
caffe是一个基于c++/cuda架构框架,开发者能够利用它自由的组织网络,目前支持卷积神经网络和全连接神经网络(人工神经网络)。在linux上,c++可以通过命令行来操作接口,对于matlab、python也有专门的接口,运算上支持cpu和gpu直接无缝切换。
caffe的特点
易用性:caffe的模型与相应优化都是以文本形式而非代码形式给出, caffe给出了模型的定义、最优化设置以及预训练的权重,方便快速使用;
速度快:能够运行最棒的模型与海量的数据;
caffe可与cudnn结合使用,可用于测试alexnet模型,在k40上处理一张图片只需要1.17ms;
模块化:便于扩展到新的任务和设置上;
使用者可通过caffe提供的各层类型来定义自己的模型;
目前caffe应用实践主要有数据整理、设计网络结构、训练结果、基于现有训练模型,使用caffe直接识别。
开发语言:c++
许可协议: bsd 2-clause license
github项目地址:https://github.com/bvlc/caffe
4. predictionio
predictionio 是面向开发人员和数据科学家的开源机器学习服务器。它支持事件采集、算法调度、评估,以及经由rest apis的预测结果查询。使用者可以通过predictionio做一些预测,比如个性化推荐、发现内容等。predictionio 提供20个预设算法,开发者可以直接将它们运行于自己的数据上。几乎任何应用与predictionio集成都可以变得更“聪明”。其主要特点如下所示:
基于已有数据可预测用户行为;
使用者可选择你自己的机器学习算法;
无需担心可扩展性,扩展性好。
predictionio 基于 rest api(应用程序接口)标准,不过它还包含 ruby、python、scala、java 等编程语言的 sdk(软件开发工具包)。其开发语言是scala语言,数据库方面使用的是mongodb数据库,计算系统采用hadoop系统架构。
开发语言:scala
许可协议:apache license 2.0
github项目地址:https://github.com/predictionio/predictionio
5. brain
brain是 javascript 中的 神经网络库。以下例子说明使用brain来近似 xor 功能:
var net = new brain.neuralnetwork();net.train([{input: [0, 0], output: [0]},{input: [0, 1], output: [1]},{input: [1, 0], output: [1]},{input: [1, 1], output: [0]}]);var output = net.run([1, 0]);// [0.987]
当 brain 用于节点中,可使用npm安装:
npm install brain
当 brain 用于浏览器,下载最新的 brain.js 文件。训练计算代价比较昂贵,所以应该离线训练网络(或者在 worker 上),并使用 tofunction()或者tojson()选项,以便将预训练网络插入到网站中。
开发语言:javascript
github项目地址:https://github.com/harthur/brain
6. keras
keras是极其精简并高度模块化的神经网络库,在tensorflow 或 theano 上都能够运行,是一个高度模块化的神经网络库,支持gpu和cpu运算。keras可以说是python版的torch7,对于快速构建cnn模型非常方便,同时也包含了一些最新文献的算法,比如batch noramlize,文档教程也很全,在官网上作者都是直接给例子浅显易懂。keras也支持保存训练好的参数,然后加载已经训练好的参数,进行继续训练。
keras侧重于开发快速实验,用可能最少延迟实现从理念到结果的转变,即为做好一项研究的关键。
当需要如下要求的深度学习的库时,就可以考虑使用keras:
考虑到简单快速的原型法(通过总体模块性、精简性以及可扩展性);
同时支持卷积网络和递归网络,以及两者之间的组合;
支持任意连接方案(包括多输入多输出训练);
可在cpu 和 gpu 上无缝运行。
keras目前支持 python 2.7-3.5。
开发语言:python
github项目地址:https://github.com/fchollet/keras
7. cntk
cntk(computational network toolkit )是一个统一的深度学习工具包,该工具包通过一个有向图将神经网络描述为一系列计算步骤。在有向图中,叶节点表示输入值或网络参数,其他节点表示该节点输入之上的矩阵运算。
cntk 使得实现和组合如前馈型神经网络dnn、卷积神经网络(cnn)和循环神经网络(rnns/lstms)等流行模式变得非常容易。同时它实现了跨多gpu 和服务器自动分化和并行化的随机梯度下降(sgd,误差反向传播)学习。
下图将cntk的处理速度(每秒处理的帧数)和其他四个知名的工具包做了比较了。配置采用的是四层全连接的神经网络(参见基准测试脚本)和一个大小是8192 的高效mini batch。在相同的硬件和相应的最新公共软件版本(2015.12.3前的版本)的基础上得到如下结果:
cntk自2015年四月就已开源。
开发语言:c++
github项目地址:https://github.com/microsoft/cntk
8. convnetjs
convnetjs是利用javascript实现的神经网络,同时还具有非常不错的基于浏览器的demo。它最重要的用途是帮助深度学习初学者更快、更直观的理解算法。
它目前支持:
常见的神经网络模块(全连接层,非线性);
分类(svm/ softmax)和回归(l2)的成本函数;
指定和训练图像处理的卷积网络;
基于deep q learning的实验强化学习模型。
一些在线示例:
convolutional neural network on mnist digits
convolutional neural network on cifar-10
toy 2d data
toy 1d regression
training an autoencoder on mnist digits
deep q learning reinforcement learning demo+image regression (painting)+comparison of sgd/adagrad/adadelta on mnist开发语言:javascript 许可协议:mit license github项目地址:https://github.com/karpathy/convnetjs
9. pattern
pattern是python的一个web挖掘模块。拥有以下工具:
数据挖掘:网络服务(google、twitter、wikipedia)、网络爬虫、html dom解析;
自然语言处理:词性标注工具(part-of-speech tagger)、n元搜索(n-gram search)、情感分析(sentiment analysis)、wordnet;
机器学习:向量空间模型、聚类、分类(knn、svm、 perceptron);
网络分析:图形中心性和可视化。
其文档完善,目前拥有50多个案例和350多个单元测试。 pattern目前只支持python 2.5+(尚不支持python 3),该模块除了在pattern.vector模块中使用lsa外没有其他任何外部要求,因此只需安装 numpy (仅在mac os x上默认安装)。
开发语言:python
许可协议:bsd license
github项目地址:https://github.com/clips/pattern
10. nupic
nupic是一个实现了htm学习算法的机器智能平台。htm是一个关于新(大脑)皮质(neocortex)的详细人工智能算法。htm的核心是基于时间的连续学习算法,该算法可以存储和调用时间和空间两种模式。nupic可以适用于解决各类问题,尤其是异常检测和流数据源预测方面。
nupic binaries文件目前可用于:
linux x86 64bit
os x 10.9
os x 10.10
windows 64bit
nupic 有自己的独特之处。许多机器学习算法无法适应新模式,而nupic的运作接近于人脑,当模式变化的时候,它会忘掉旧模式,记忆新模式。
开发语言:python
github项目地址:https://github.com/numenta/nupic
11. theano
theano是一个python库,它允许使用者有效地定义、优化和评估涉及多维数组的数学表达式,同时支持gpus和高效符号分化操作。theano具有以下特点:
与numpy紧密相关--在theano的编译功能中使用了numpy.ndarray ;
透明地使用gpu--执行数据密集型计算比cpu快了140多倍(针对float32);
高效符号分化--theano将函数的导数分为一个或多个不同的输入;
速度和稳定性的优化--即使输入的x非常小也可以得到log(1+x)正确结果;
动态生成 c代码--表达式计算更快;
广泛的单元测试和自我验证--多种错误类型的检测和判定。
自2007年起,theano一直致力于大型密集型科学计算研究,但它目前也很被广泛应用在课堂之上( 如montreal大学的深度学习/机器学习课程)。
开发语言:python
github项目地址:https://github.com/theano/theano
12. mxnet
mxnet是一个兼具效率和灵活性的深度学习框架。它允许使用者将符号编程和命令式编程相结合,以追求效率和生产力的最大化。其核心是动态依赖调度程序,该程序可以动态自动进行并行化符号和命令的操作。其中部署的图形优化层使得符号操作更快和内存利用率更高。该库轻量且便携带,并且可扩展到多个gpu和多台主机上。
主要特点:
其设计说明提供了有用的见解,可以被重新应用到其他dl项目中;
任意计算图的灵活配置;
整合了各种编程方法的优势最大限度地提高灵活性和效率;
轻量、高效的内存以及支持便携式的智能设备;
多gpu扩展和分布式的自动并行化设置;
支持python、r、c++和 julia;
对“云计算”友好,直接兼容s3、hdfs和azure。
mxnet不仅仅是一个深度学习项目,它更是一个建立深度学习系统的蓝图、指导方针以及黑客们对深度学习系统独特见解的结合体。
开发语言:jupyter notebook
开源许可:apache-2.0license
github项目地址:https://github.com/dmlc/mxnet
13. vowpal wabbit
vowpal wabbit是一个机器学习系统,该系统推动了如在线、散列、allreduce、learning2search、等方面机器学习前沿技术的发展。 其训练速度很快,在20亿条训练样本,每个训练样本大概100个非零特征的情况下:如果特征的总位数为一万时,训练时间为20分钟;特征总位数为1000万时,训练时间为2个小时。vowpal wabbit支持分类、 回归、矩阵分解和lda。
当在hadoop上运行vowpal wabbit时,有以下优化机制:
懒惰初始化:在进行all reduce之前,可将全部数据加载到内存中并进行缓存。即使某一节点出现了错误,也可以通过在另外一个节点上使用错误节点的数据(通过缓存来获取)来继续训练。
speculative execution:在大规模集群当中,一两个很慢的mapper会影响整个job的性能。speculative execution的思想是当大部分节点的任务完成时,hadoop可以将剩余节点上的任务拷贝到其他节点完成。
开发语言:c++
github项目地址:https://github.com/johnlangford/vowpal_wabbit
14. ruby warrior
通过设计了一个游戏使得ruby语言和人工智能学习更加有乐趣和互动起来。
使用者扮演了一个勇士通过爬上一座高塔,到达顶层获取珍贵的红宝石(ruby)。在每一层,需要写一个ruby脚本指导战士打败敌人、营救俘虏、到达楼梯。使用者对每一层都有一些认识,但是你永远都不知道每层具体会发生什么情况。你必须给战士足够的人工智能,以便让其自行寻找应对的方式。
勇士的动作相关api:
warrior.walk: 用来控制勇士的移动,默认方向是往前;
warrior.feel:使用勇士来感知前方的情况,比如是空格,还是有怪物;
warrior.attack:让勇士对怪物进行攻击;
warrior.health:获取勇士当前的生命值;
warrior.rest:让勇士休息一回合,恢复最大生命值的10%。
勇士的感知api:
space.empty:感知前方是否是空格;
space.stairs:感知前方是否是楼梯;
space.enemy: 感知前方是否有怪物;
space.captive:感知前方是否有俘虏;
space.wall:感知前方是否是墙壁。
开发语言:ruby
github项目地址:https://github.com/ryanb/ruby-warrior
以上为github上最流行的开源机器学习项目top14,“28款github最流行的开源机器学习项目(二)”。
铁电存储器PB85RS2MC在DSP控制器的应用
LabVIEW 2016新增通道连线功能可以大幅缩短开发时间
疫情过后 额温枪市场将会陷入断崖式下跌
广凌安防系统整体解决方案,周全维护校园安全
类比半导体重磅发布车规级智能高边驱动HD7xxxQ系列
GitHub上最受欢迎的28款开源的机器学习项目,TensorFlow位列其中
兆芯开先ZX-C处理器荣获2017年度大中华IC设计成就奖
灵动微32位单片机MM32的电梯系统解决方案
普通人转行“提示工程师”毫无意义
什么情况下使用隔离变压器
CYZT-9032开关柜状态指示器
建立图形用户界面 JAVA实验
工程师队伍体现出的技术发展之殇
维谛UPS电源常见告警及处理办法
测量投影仪特点_测量投影仪测量方法
干扰滤波器的种类_干扰滤波器怎么装
关于MySQL面试题和题型介绍
高丽团队开发出无电源超精密皮肤传感器
日置示波器探头如何校准?
华为Mate20X和iPhoneXsMax哪个游戏性能最好