深度学习框架汇总

随着“大数据时代”的到来和计算能力的提升,深度学习成为了一种很火的新科技。已经成功的应用到了很多个领域中。包括“计算机视觉”“语音识别”“自然语言处理”等。为了进行高效的开发一个深度学习系统,许多大型科技公司都推出了自己的深度学习框架。而且,最近这段时间接二连三的有新的“深度学习”框架推出。自己感觉有必要做一个总结,来收集一下这些深度学习框架。

但是,在此同时,我有一个问题,真的需要这么多的深度学习框架吗?在科技领域为什么看不到合作呢?众多的深度学习框架,企业和个人如何选择一个适合自己的框架呢?

以下,我将围绕着几个问题展开整篇博客的内容。

1. 首先,让我们看一下,当前都有哪些深度学习框架?我会列出相应的链接,方便大家的访问。(我会不断地更新这个列表)

1.Tensorflow – https://www.tensorflow.org/ 
github – https://github.com/tensorflow/tensorflow

2.Caffe – http://caffe.berkeleyvision.org/ 
github – https://github.com/BVLC/caffe

3.Theano – http://deeplearning.net/software/theano/install.html 
github – https://github.com/Theano/Theano

4.keras – https://keras.io/ 
github – https://github.com/fchollet/keras

5.Torch – http://torch.ch/ 
github – https://github.com/torch/torch7

6.Lasagne – http://lasagne.readthedocs.io/en/latest/ 
github – https://github.com/Lasagne/Lasagne

7.MXNet – http://mxnet.io/ 
github – https://github.com/dmlc/mxnet

8.DIGITS – https://developer.nvidia.com/digits 
github – https://github.com/NVIDIA/DIGITS

9.CNTK – https://cntk.codeplex.com/ 
github – https://github.com/Microsoft/CNTK

10.PaddlePaddle – http://www.paddlepaddle.org/ 
github – https://github.com/PaddlePaddle/Paddle

11.Deeplearning4j – https://github.com/deeplearning4j/ 
deeplearning4j

12.tensorlayer – http://tensorlayer.readthedocs.io/en/latest/ 
github – https://github.com/zsdonghao/tensorlayer

13.TFLearn – http://tflearn.org/tutorials/ 
githu – https://github.com/tflearn/tflearn

14.caffe2 – https://caffe2.ai/ 
github – https://github.com/caffe2/caffe2

15.pytorch – http://pytorch.org/ 
github – https://github.com/pytorch/pytorch

16.Leaf – http://autumnai.com/leaf/book/ 
github – https://github.com/autumnai/leaf

17.Chainer – http://chainer.org/ 
github – https://github.com/pfnet/chainer

18.DSSTNE 
github – https://github.com/amznlabs/amazon-dsstne

19.Neon 
github – https://github.com/NervanaSystems/neon

2. 接下来,让我们简单的比较一下它们的性能,能存在总会有理由的,它们都有自己的特点。
以下的表格是一个有关于各个深度学习框架的一个对比:

 

这里写图片描述

注: 
1.从这个表格我们可以看出,当前比较受欢迎的深度学习框架包括:tensorflow、caffe、keras、CNTK、MXNet、Torch、Theano。工业界中常用的包括:tensorflow、caffe、CNTK、MXNet、Torch。学术界常用的包括:keras、theano。

2.这个表格中的部分数据来自于互联网,可能存在着一定的误差吗,但是总的来说具有一定的参考价值。

3. 接下来,让我们一起来分析并探讨一些问题。
通过上面的表格,我们会发现有很多的深度学习框架。那么,我们该如何选择一个适合自己的深度学习框架呢?你需要根据你自己的实际需要选择合适的框架。需要考虑的主要因素包括:开发语言、硬件平台、操作系统等

 

a. 开发语言 
通过上面的表格我们可以总结出深度学习支持的开发语言包括: 
Python/C++/R/Julia/Scala/Go/Javascript/Perl/Matlab 
/Lua/Cuda/JAVA/Rust等。但是最常用的两种开发语言是:Python和C++。主要的原因如下所示:

1) python非常简单,很容易上手,但是运行的效率比较低,因此常用来快速的搭建深度学习中的网络模型。 
2)C++的语法众多,需要自己分配并处理内容,开发代码冗长,但是运行效率很高,因此常用来作为深度学习中的终端引擎来使用。 
如果你自己不熟悉Python或者C++,你可以使用的框架就非常的有限; 
如果你熟悉Python或者C++,你几乎可以使用任何一种深度学习框架; 
如果你是一名JAVA爱好者,你更可能会选择利用Deeplearning来进行开发。

因此,开发语言是一个限制你使用深度学习框架的一个关键因素。你需要根据你自己的实际情况选择。

b. 硬件平台 
通过上面这个表格,我们可以总结出当前的深度学习框架支持的硬件平台包括:CPU、GPU、Andriod、IOS、FPGA、ARM等多种平台。 
如果你的电脑不支持GPU,你就只能选择其他的平台; 
如果你自己擅长GPU,你可以使用的框架就很多; 
如果你的项目制定的硬件是FPGA,你能使用的框架就会受到限制。

因此,这也是一个限制你使用框架的关键因素。你需要根据自己的需要以及项目的需要去进行选择。

c. 操作系统 
当前,这些框架支持的系统主要包括:Linux、Mac、Windows。几乎包括了所有的操作系统。但是对应不同的框架所支持的操作系统有很多不同。 
如果你熟悉Linux系统,那么你几乎可以使用任何一个框架。 
如果你想在Windows下使用这些框架,那么你就会受到很大的限制。同时会出现很多莫名其妙的问题。

因此,你需要选择一个合适的操作系统,这可能会影响你的开发进程和使用的框架的数目。

d. 分布式系统 
分布式系统可以将一个很大的任务分割开来,在不同的主机上进行运行,这可以大大的提高训练的速率,加快整个开发的过程。这对于大模型的训练具有至关重要的作用。当前对分布式系统有很好的支持的框架包括:tensorflow、CNTK、MXNet、Torch、Caffe。都有强大的后台。 
如果你训练的数据量很少,你可以选择使用单片CPU或者单片GPU; 
如果你训练的数据量较大,你可以选择使用多块CPU或者多块GPU; 
如果你训练的数据量很大,你就需要使用到云服务器或者一个分布式系统集群。

因此,这也是一个影响你选择框架的一个因素。 
总之,你需要综合考虑多个因素选择一个合适的深度学习框架。

4. 这里我想要提出一个问题!!

的问题是:为什么不能将这些框架整合起来,做一个大的框架,支持所有的系统,支持所有的语言,支持所有的平台,最重要的是只要一个? 
这里的框架水平不一,但是它们的存在是由理由的。它们或多或少的都有自己的优势,何必单干呢。深度学习已经是一个趋势,应该建立一个国际组织,负责制定一个标准,收集他们的长处,做一个高性能的框架,这样不是更高效嘛。使用者也不再需要纠结使用哪一种框架。开发商也不需要进行独自的开发,维护。同时可以让更多的爱好者来共同维护它。这可能需要时间吧!希望这个愿望可以实现!

已标记关键词 清除标记
相关推荐
【为什么还需要学习C++?】 你是否接触很多语言,但从来没有了解过编程语言的本质? 你是否想成为一名资深开发人员,想开发别人做不了的高性能程序? 你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹?   那么C++就是你个人能力提升,职业之路进阶的不二之选。 【课程特色】 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准库全部知识体系。 2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。 3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。 【学完后我将达到什么水平?】 1.对C++的各个知识能够熟练配置、开发、部署; 2.吊打一切关于C++的笔试面试题; 3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。 【面向人群】 1.希望一站式快速入门的C++初学者; 2.希望快速学习 C++、掌握编程要义、修炼内功的开发者; 3.有志于挑战更高级的开发项目,成为资深开发的工程师。 【课程设计】 本课程包含3大模块 基础篇 本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。 进阶篇 本篇主要讲解编程中常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。 提升篇: 本篇可以帮助学员更加高效的进行c++开发,其中包含类型转换、文件操作、异常处理、代码重用等内容。
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页