对我来说,在 Ubuntu 上安装和使用最简单的是 Neon。我是做模型的,编程和数学都是初学者。不久我写了自己的可组合容器和更高级的模型。我在示例中遇到一些bug,修复了其中一些,并且可能会在某些点提交一些 pull 请求。Neon 有一些非常好的示例,涵盖了最新的一些研究的实现。在尝试 Neon 之前,我安装过 Theano,Tensoflow 和 Keras / Tensorflow,但几乎没有使用过。我认为不考虑设置的话,在易用性上 Keras 和 Neon 差不多。 当我开始考虑为大规模分布式训练写一点东西,我在打造自己的解决方案之前再次查看,并开始设置 mxnet。Mxnet 支持分布式训练和基于 ZMQ 的分布式KV存储,这正是我想要的。乍看之下它也像 Neon 一样可以直接使用。但在 Windows 和 Ubuntu 16.04 上设置 mxnet 简直就是噩梦,我只能放弃了对本地机器的 CUDA 支持。Amazon 上有一些预安装的示例。 我的经验是,Neon 最容易设置,在设置模型的难度上可能类似于 Keras,并且完全适应各种任务,包括图像处理、DL 以及其他不需要分布式训练的任务。就目前来说,好像也是 Neon 的性能最好。 用户 congerous: 与 Torch 和 Neon 相比,Tensorflow 是最慢的。虽然 Neon 也不是很有吸引力,很像 Chainer 和 Lasagne。Caffe 和 Neon 在图像任务上都很快,但他们不是真正意义上通用目的的框架。只说持久力的话,Theano,Torch / PyTorch,MxNet,TensorFlow / Keras 和 CNTK 应该都会继续增长。 深度学习框架的基本构成:五大基本要素 很多人都会遇到该如何选择框架的问题,了解这些框架的基础构造有助于你更好地做出选择。 常用的框架包括 Theano、TensorFlow、Torch 和 Keras。它们各有千秋,苏黎世联邦理工学院计算机科学系硕士研究生,同时也是 Theano 贡献者(contributor)的 Gokula Krishnan Santhanam 日前撰文详细剖析了这些框架共通的基础构成。 首先,一个深度学习框架含有以下五个核心组件: 张量对象(A Tensor Object) 对该张量对象进行的各种运算(Operations on the Tensor Object) 计算图和优化(A Computation Graph and Optimizations) 自动微分工具(Auto-differentiation tools) BLAS、cuDNN 扩展组件(BLAS / cuBLAS and cuDNN extensions) 为了向开发者提供尽量简单的接口,大部分深度学习框架通常都会将普通的概念抽象化,这可能是造成许多用户感知不到上述五点核心组件的重要原因。 下面,我们就来一一看一下这五大组成。 1. 张量(Tensor Object) 用张量表示的对象是一个深度学习框架中的核心组件,因为后续的所有运算和优化算法都是基于张量进行的。几何代数中定义的张量是基于向量和矩阵的推广,通俗一点理解的话,我们可以将标量视为零阶张量,矢量视为一阶张量,那么矩阵就是二阶张量。 举例来说,可以将任意一张RGB彩色图片表示成一个三阶张量,三个维度分别是图片的高度、宽度和色彩数据。下图如果按照RGB三原色表示,就可以拆分为三张红色、绿色和蓝色的灰度图片(见下图中间的三张不同突破),再将这张图用张量表示出来,就是最下方的那张表格。
图中只显示了前5行、320列的数据,每个方格代表一个像素点,其中的数据[1.0, 1.0, 1.0]即为颜色。假设用[1.0, 0, 0]表示红色,[0, 1.0, 0]表示绿色,[0, 0, 1.0]表示蓝色,那么如图所示,前面5行的数据则全是白色。 将这一定义进行扩展,我们也可以用四阶张量表示一个包含多张图片的数据集,其中的四个维度分别是:图片在数据集中的编号,图片高度、宽度,以及色彩数据。 (责任编辑:本港台直播) |