博客
关于我
深度学习框架的比较(MXNet, Caffe, TensorFlow, Torch, Theano)
阅读量:146 次
发布时间:2019-02-26

本文共 1468 字,大约阅读时间需要 4 分钟。

1. 基本概念

1.1 MXNet相关概念

深度学习的目标是如何方便地表达神经网络,以及如何快速训练得到模型。CNN(卷积层)能够表达空间相关性(学表示),而 RNN/LSTM 则能够表达时间连续性(建模时序信号)。命令式编程(imperative programming)相对浅嵌入,用户可以直接通过语句执行操作,如 numpy 和 Torch 就属于这种类型。声明式语言(declarative programming)则深嵌入,提供一整套针对具体应用的迷你语言。用户只需声明要做什么,系统自行执行。这类系统包括 Caffe、Theano 和 TensorFlow。命令式编程更直观,但对优化和自动求导不利;而声明式语言则更适合优化和自动化处理。

浅嵌入,命令式编程 深嵌入,声明式编程
如何执行 a=b+1 需要 b 已经被赋值 返回对应的计算图
优点 语义直观,灵活 性能优化全面,可视化

MXNet 则尝试将两种编程模式无缝结合。用户可以自由混合使用命令式和声明式编程。例如,可以用声明式编程描述神经网络并利用自动求导训练模型,同时用命令式编程实现迭代训练和控制逻辑,方便调试和与主语言交互。

1.2 深度学习的关键特点

  • 层级抽象:通过多个层次逐步建模复杂概念。
  • 端到端学习:从输入到输出进行统一建模。
  • 2. 比较表

    比较项 Caffe Torch Theano TensorFlow MXNet
    主语言 C++/cuda C++/Lua/cuda Python/c++/cuda Python/c++/cuda C++/cuda
    从语言 Python/Matlab - - - Python
    硬件支持 CPU/GPU CPU/GPU/FPGA CPU/GPU CPU/GPU CPU/GPU
    分布式 N N N Y (未开源) Y
    速度 中等 中等
    灵活性 一般
    文档 全面 全面 中等 中等 全面
    适合模型 CNN CNN/RNN CNN/RNN CNN/RNN CNN/RNN
    命令式支持 N Y Y N Y
    声明式支持 Y N Y Y Y

    3. 详细描述

    3.1 MXNet

    MXNet 的系统架构包括多种主语言的嵌入、编程接口(矩阵运算、符号表达式、分布式通讯)、两种编程模式的统一系统实现,以及硬件支持。

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

    3.2 Caffe

    优点:

  • 第一个主流的工业级深度学习工具。
  • 出色卷积神经网络实现。
  • 专注于图像处理。
  • 缺点:

  • 扩展性差,递归网络支持不足。
  • 层结构需要自行实现 forward/backward。
  • 3.3 TensorFlow

    优点:

  • Google 开源框架,应用广泛。
  • 符号张量操作便捷。
  • TensorFlowBoard 提供优质可视化工具。
  • 编译速度快。
  • 缺点:

  • 速度较慢,内存占用大。
  • 层支持不足,时间序列功能缺失。
  • 3.4 Torch

    优点:

  • Facebook 开源框架。
  • 高灵活性和速度。
  • 优化基础计算单元。
  • 支持时间卷积和 3D 卷积。
  • 缺点:

  • Lua 接口学习成本高。
  • 缺少 Python 接口。
  • 层结构扩展性差。
  • RNN 官方支持不足。
  • 3.5 Theano

    优点:

  • Python 开源框架。
  • 强大灵活性和实验支持。
  • 第一个使用符号张量图描述模型的架构。
  • 支持多平台。
  • 提供高级工具如 Blocks 和 Keras。
  • 缺点:

  • 编译速度慢。
  • 导入效率低。
  • 代码基础为 Python,难以优化。
  • 转载地址:http://cmuz.baihongyu.com/

    你可能感兴趣的文章
    Nginx配置负载均衡到后台网关集群
    查看>>
    ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
    查看>>
    NHibernate学习[1]
    查看>>
    NHibernate异常:No persister for的解决办法
    查看>>
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
    查看>>
    NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
    查看>>
    NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
    查看>>
    NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
    查看>>
    NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
    查看>>
    NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
    查看>>
    NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
    查看>>