欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > 人工智能 > caffe >内容正文

caffe

深度学习框架的比较(mxnet, caffe, tensorflow, torch, theano) -凯发k8官方网

发布时间:2024/9/21 caffe 9 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 深度学习框架的比较(mxnet, caffe, tensorflow, torch, theano) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1.1 mxnet相关概念

    深度学习目标:如何方便的表述神经网络,以及如何快速训练得到模型

    cnn(卷积层):表达空间相关性(学表示)

    rnn/lstm:表达时间连续性(建模时序信号)
    命令式编程(imperative programming):嵌入的较浅,其中每个语句都按原来的意思执行,如numpy和torch就是属于这种

    声明式语言(declarative programing):嵌入的很深,提供一整套针对具体应用的迷你语言。即用户只需要声明要做什么,而具体执行则由系统完成。这类系统包括caffe,theano和tensorflow。命令式编程显然更容易懂一些,更直观一些,但是声明式的更利于做优化,以及更利于做自动求导,所以都保留。  

 浅嵌入,命令式编程深嵌入,声明式编程
如何执行a=b 1需要b已经被赋值。立即执行加法,将结果保存在a中。返回对应的计算图(computation graph),我们可以之后对b进行赋值,然后再执行加法运算
优点语义上容易理解,灵活,可以精确控制行为。通常可以无缝的和主语言交互,方便的利用主语言的各类算法,工具包,bug和性能调试器。在真正开始计算的时候已经拿到了整个计算图,所以我们可以做一系列优化来提升性能。实现辅助函数也容易,例如对任何计算图都提供forward和backward函数,对计算图进行可视化,将图保存到硬盘和从硬盘读取。
缺点实现统一的辅助函数和提供整体优化都很困难。很多主语言的特性都用不上。某些在主语言中实现简单,但在这里却经常麻烦,例如if-else语句 。debug也不容易,例如监视一个复杂的计算图中的某个节点的中间结果并不简单。
    目前现有的系统大部分都采用上两种编程模式的一种。与它们不同的是,mxnet尝试将两种模式无缝的结合起来。在命令式编程上mxnet提供张量运算,而声明式编程中mxnet支持符号表达式。用户可以自由的混合它们来快速实现自己的想法。例如我们可以用声明式编程来描述神经网络,并利用系统提供的自动求导来训练模型。另一方便,模型的迭代训练和更新模型法则中可能涉及大量的控制逻辑,因此我们可以用命令式编程来实现。同时我们用它来进行方便的调式和与主语言交互数据。

1.2 深度学习的关键特点

      (1)层级抽象

      (2)端到端学习

比较项caffetorchtheanotensorflowmxnet
主语言c /cudac /lua/cudapython/c /cudac /cudac /cuda
从语言python/matlab--pythonpython/r/julia/go
硬件cpu/gpucpu/gpu/fpgacpu/gpucpu/gpu/mobilecpu/gpu/mobile
分布式nnny(未开源)y
速度中等中等
灵活性一般
文档全面全面中等中等全面
适合模型cnncnn/rnncnn/rnncnn/rnncnn/rnn?
操作系统所有系统linux, osx所有系统linux, osx所有系统
命令式nynny
声明式ynyyy
接口protobufluapythonc /pythonpython/r/julia/go
网络结构分层方法分层方法符号张量图符号张量图?

注:1)使用符号张量图描述模型,增加新的层更加方便;而分层方法增加新的层需要自己实现(forward,backward和gradient更新函数)。

3.1 mxnet

   mxnet的系统架构如下图所示:

 

    从上到下分别为各种主语言的嵌入,编程接口(矩阵运算,符号表达式,分布式通讯),两种编程模式的统一系统实现,以及各硬件的支持。

    mxnet的设计细节包括:符号执行和自动求导;运行依赖引擎;内存节省。

3.2 caffe    

    优点:

    1)第一个主流的工业级深度学习工具。
    2)它开始于2013年底,由uc berkely的yangqing jia老师编写和维护的具有出色的卷积神经网络实现。在计算机视觉领域caffe依然是最流行的工具包。

    3)专精于图像处理

    缺点:    

    1)它有很多扩展,但是由于一些遗留的架构问题,不够灵活且对递归网络和语言建模的支持很差。

    2)基于层的网络结构,其扩展性不好,对于新增加的层,需要自己实现(forward, backward and gradient update)

3.3 tensorflow

   优点:

   1) google开源的其第二代深度学习技术——被使用在google搜索、图像识别以及邮箱的深度学习框架。

   2)是一个理想的rnn(递归神经网络)api和实现,tensorflow使用了向量运算的符号图方法,使得新网络的指定变得相当容易,支持快速开发。

   3)tf支持使用arm/neon指令实现model decoding

   4)tensorboard是一个非常好用的网络结构可视化工具,对于分析训练网络非常有用

   5)编译过程比theano快,它简单地把符号张量操作映射到已经编译好的函数调用

   缺点:

   1) 缺点是速度慢,内存占用较大。(比如相对于torch)

   2)支持的层没有torch和theano丰富,特别是没有时间序列的卷积,且卷积也不支持动态输入尺寸,这些功能在nlp中非常有用。

    

   

3.4 torch

    优点:    

    1)facebook力推的深度学习框架,主要开发语言是c和lua

    2)有较好的灵活性和速度
    3)它实现并且优化了基本的计算单元,使用者可以很简单地在此基础上实现自己的算法,不用浪费精力在计算优化上面。核心的计算单元使用c或者cuda做了很好的优化。在此基础之上,使用lua构建了常见的模型

    4)速度最快,见convnet-benchmarks

    5)支持全面的卷积操作:

          - 时间卷积:输入长度可变,而tf和theano都不支持,对nlp非常有用;

          - 3d卷积:theano支持,tf不支持,对视频识别很有用
    缺点

    1)是接口为lua语言,需要一点时间来学习。

    2)没有python接口

    3)与caffe一样,基于层的网络结构,其扩展性不好,对于新增加的层,需要自己实现(forward, backward and gradient update)

    4)rnn没有官方支持

3.5 theano

    优点:

    1)2008年诞生于蒙特利尔理工学院,主要开发语言是python

    2)theano派生出了大量深度学习python软件包,最著名的包括blocks和keras

    3)theano的最大特点是非常的灵活,适合做学术研究的实验,且对递归网络和语言建模有较好的支持

    4)是第一个使用符号张量图描述模型的架构

    5)支持更多的平台

    6)在其上有可用的高级工具:blocks, keras等

    缺点:

   1)编译过程慢,但同样采用符号张量图的tf无此问题

   2)import theano也很慢,它导入时有很多事要做

   3)作为开发者,很难进行改进,因为code base是python,而c/cuda代码被打包在python字符串中

参考资料:

1)mxnet设计和实现简介

2)evaluation of deep learning toolkits

3)tensorflow vs. theano vs. torch comparison


总结

以上是凯发k8官方网为你收集整理的深度学习框架的比较(mxnet, caffe, tensorflow, torch, theano)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

  • 上一篇:
  • 下一篇:
网站地图