深度学习框架-TensorFlow, Catte, Theano, Torch等

参考:
11种深度学习框架影响力对比 http://m.elecfans.com/article/798648.html
12大深度学习开源框架(caffe,tf,pytorch,mxnet等)快速入门项目 https://zhuanlan.zhihu.com/p/61095501
2020年深度学习最佳GPU一览,看看哪一款最适合你! https://zhuanlan.zhihu.com/p/110774518
2020 年的深度学习框架选择 https://zhuanlan.zhihu.com/p/107124513

区别比较




学习推荐

  • 推荐1:
    (1) 不管怎么说,tensorflow/pytorch你都必须会,这是目前开发者最喜欢,开源项目最丰富的两个框架。
    (2) 如果你要进行移动端算法的开发,那么Caffe是不能不会的。
    (3) 如果你非常熟悉Matlab,matconvnet你不应该错过。
    (4) 如果你追求高效轻量,那么darknet和mxnet你不能不熟悉。
    (5) 如果你很懒,想写最少的代码完成任务,那么用keras吧。
    (6) 如果你是java程序员,那么掌握deeplearning4j没错的。
    其他的框架,也自有它的特点,大家可以自己多去用用。
  • 推荐2:
    新手入门,建议从 keras 开始。
    如果能手写公式,且能实现出模型,就不要学 keras 了。有用,但投入产出比不高。
    Tensorflow 内置了 Keras,单独安装 Keras 基本是不需要了。
    产品中的算法落地,用 Tensorflow。学术研究用 PyTorch。
    Keras 是入门玩具,不宜依赖。上手简单,API 设计的不适合深度定制开发。
    MxNet 的训练速度快 30%,收益不大。代码风格统一,SOTA 的 pretrain model 多。训练速度快。

深度学习框架介绍

1 Caffe

github地址:https://github.com/BVLC/caffe。
1)主流工业级深度学习工具,具有出色的卷积神经网络实现。在计算机视觉领域Caffe仍然是最流行的工具包,他有很多扩展,但是由于
一些遗留的架构问题,它对递归网络和语言建模的支持很差。此外,在caffe种图层需要使用C++定义,而网络则使用protobuf定义。
2)caffe支持pycaffe接口,但这仅仅是用来辅助命令行接口的,而即便是是使用pycaffe也必须使用Protobuf.
3)基于C++,因此可以在多种是设备上编译,具有跨平台性,在部署方面是最佳选择。
4)性能简单快速
5)算平均水准,痛点在于需要使用C++定义图层,而模型需要使用protobuf定义。如果想支持CPU和GPU,用户还必须实现额外的函数如,Forward_gpu和Backward_gpu;
对于自定义的层类型,还必须为其分配一个int类型的ID,并将其添加到proto文件中。
caffe有很明显的优点和缺点。
优点:

  • 以C++/CUDA/python代码为主,速度快,性能高。
  • 工厂设计模式,代码结构清晰,可读性和拓展性强。
  • 支持命令行、Python和Matlab接口,使用方便。
  • CU和GPU之间切换方便,多GPU训练方便。
  • 工具丰富,社区活跃。
    缺点:
  • 源代码修改门槛较高,需要实现前向反向传播,以及CUDA代码。
  • 不支持自动求导。
  • 不支持模型级并行,只支持数据级并行
  • 不适合于非图像任务。

2 TensorFlow:

github地址:https://github.com/tensorflow/tensorflow。
1)是一个理想的RNN(递归网络神经)API和实现,TensorFlow使用向量运算的符号图方法,使得新网络的指定变得相当容易,但TensorFlow
并不支持双向RNN和3D卷积,同时公共版本的图定义也不支持循环和条件控制,这使得RNN的实现并不理想,因为必须要使用Python循环且
无法进行图编译优化。
2)支持python和c++接口。
3)由于它使用了Eigen而不是BLAS类库,所以能够基于ARM架构编译和优化。用户可以将训练好的模型部署到多种设备上面,不需要实现单独的
模型解码器或者加载python/LuaJIT解释器。他的模型可以部署到Windows设备上。
4)架构清晰,采用模块化设计,支持多种前端和执行平台
点评:不完美但最流行的深度学习框架,社区强大,适合生产环境

3 Pytorch

github地址:https://github.com/pytorch/pytorch。
(1) 概述:一句话总结Pytorch = Python + Torch。
Torch是纽约大学的一个机器学习开源框架,几年前在学术界非常流行,包括Lecun等大佬都在使用。但是由于使用的是一种绝大部分人绝对没有听过的Lua语言,导致很多人都被吓退。后来随着Python的生态越来越完善,Facebook人工智能研究院推出了Pytorch并开源。Pytorch不是简单的封装Torch 并提供Python接口,而是对Tensor以上的所有代码进行了重构,同TensorFlow一样,增加了自动求导。
后来Caffe2全部并入Pytorch,如今已经成为了非常流行的框架。很多最新的研究如风格化、GAN等大多数采用Pytorch源码。
(2) 特点
动态图计算。TensorFlow从静态图发展到了动态图机制Eager Execution,pytorch则一开始就是动态图机制。动态图机制的好处就是随时随地修改,随处debug,没有类似编译的过程。
简单。相比TensorFlow1.0中Tensor、Variable、Session等概念充斥,数据读取接口频繁更新,tf.nn、tf.layers、tf.contrib各自重复,Pytorch则是从Tensor到Variable再到nn.Module,最新的Pytorch已经将Tensor和Variable合并,这分别就是从数据张量到网络的抽象层次的递进。有人调侃TensorFlow的设计是“make it complicated”,那么 Pytorch的设计就是“keep it simple”。

4 Mxnet

github地址:https://github.com/apache/incubator-mxnet。
(1) 概述
Mxnet是由李沐等人领导开发的非常灵活,扩展性很强的框架,被Amazon定为官方框架。MXNet的很多作者都是中国人,其最大的贡献组织为百度。
(2) 特点
Mxnet同时拥有命令式编程和符号式编程的特点。在命令式编程上MXNet提供张量运算,进行模型的迭代训练和更新中的控制逻辑;在声明式编程中MXNet支持符号表达式,用来描述神经网络,并利用系统提供的自动求导来训练模型。Mxnet性能非常高,推荐资源不够的同学使用。

5 Keras

github网址:https://github.com/keras-team/keras。
(1) 概述
Keras是一个对小白用户非常友好而简单的深度学习框架,严格来说并不是一个开源框架,而是一个高度模块化的神经网络库。
Keras在高层可以调用TensorFlow,CNTK,Theano,还有更多的库也在被陆续支持中。 Keras的特点是能够快速实现模型的搭建,是高效地进行科学研究的关键。
(2) 特点

  • 高度模块化,搭建网络非常简洁。
  • API很简单,具有统一的风格。
  • 容易扩展,只需使用python添加新类和函数。

6 CNTK

github地址:https://github.com/Microsoft/CNTK。
(1) 概述
CNTK是微软开源的深度学习工具包,它通过有向图将神经网络描述为一系列计算步骤。在有向图中,叶节点表示输入值或网络参数,而其他节点表示其输入上的矩阵运算。
CNTK允许用户非常轻松地实现和组合流行的模型,包括前馈DNN,卷积网络(CNN)和循环网络(RNN / LSTM)。与目前大部分框架一样,实现了自动求导,利用随机梯度下降方法进行优化。
(2)特点
CNTK性能较高,按照其官方的说法,比其他的开源框架性能都更高。
适合做语音,CNTK本就是微软语音团队开源的,自然是更合适做语音任务,使用RNN等模型,以及在时空尺度分别进行卷积非常容易。
1)目前已经发展成为一个通用的、平台独立的深度学习系统。
2) 没有python或者其他高级语言的接口。
3)与Caffe一样,也是基于C++并且是跨平台的,部署非常简单,但它不支持ARM构架,这限制了其在移动设备上的能力。
4)性能简单快速

7 Lasagne/Theano

github地址:https://github.com/Lasagne/Lasagne。
Lasagen其实就是封装了theano,后者是一个很老牌的框架,在2008年的时候就由Yoshua Bengio领导的蒙特利尔LISA组开源了。
1)支持大部分的先进网络,现在很多研究想法都源于Theano,他引领了符号图在编程网络中使用的趋势,Theano的符号API支持循环控制,让
RNN实现更加容易且高效。
2)支持python接口
3)缺少底层接口,并且其python解释器也很低效,对工业用户而言缺少吸引力。跨平台,模型能够部署到Windows环境上。
4)架构变态,整个代码库都是Python的,就来你C/cuda代码也要被打包为Python字符串,这使得它难以导航、调试、重构和维护。
点评:由于Theano已经停止开发,不建议作为研究工具继续学习。

8 Torch:

1)对卷积网络的支持非常好。TensorFlow和Theano中时域卷积可以通过conv2d来实现,但这样做有点取巧;
2)在luaJIT上运行,与c++\c#以及JAVA比较,速度相当快,性能更好,但是Lua不是主流的语言。
3)需要LuaJIT的支持,集成方面难度大,使得他的吸引力不如Caffe\CNTK\TensorFlow等直接支持C++框架。
Caffe、CNTK、TensorFlow和Theano都在所有的系统上运行,而Torch不支持Windows

PPT提案图


posted @ 2020-10-23 11:38  Alice1005  阅读(360)  评论(0编辑  收藏  举报