本文共 1468 字,大约阅读时间需要 4 分钟。
深度学习的目标是如何方便地表达神经网络,以及如何快速训练得到模型。CNN(卷积层)能够表达空间相关性(学表示),而 RNN/LSTM 则能够表达时间连续性(建模时序信号)。命令式编程(imperative programming)相对浅嵌入,用户可以直接通过语句执行操作,如 numpy 和 Torch 就属于这种类型。声明式语言(declarative programming)则深嵌入,提供一整套针对具体应用的迷你语言。用户只需声明要做什么,系统自行执行。这类系统包括 Caffe、Theano 和 TensorFlow。命令式编程更直观,但对优化和自动求导不利;而声明式语言则更适合优化和自动化处理。
| 浅嵌入,命令式编程 | 深嵌入,声明式编程 | |
|---|---|---|
| 如何执行 a=b+1 | 需要 b 已经被赋值 | 返回对应的计算图 |
| 优点 | 语义直观,灵活 | 性能优化全面,可视化 |
MXNet 则尝试将两种编程模式无缝结合。用户可以自由混合使用命令式和声明式编程。例如,可以用声明式编程描述神经网络并利用自动求导训练模型,同时用命令式编程实现迭代训练和控制逻辑,方便调试和与主语言交互。
| 比较项 | 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 |
MXNet 的系统架构包括多种主语言的嵌入、编程接口(矩阵运算、符号表达式、分布式通讯)、两种编程模式的统一系统实现,以及硬件支持。
MXNet 的设计细节包括符号执行和自动求导、运行依赖引擎、内存节省等。
优点:
缺点:
优点:
缺点:
优点:
缺点:
优点:
缺点:
转载地址:http://cmuz.baihongyu.com/