转:TensorFlow和Caffe、MXNet、Keras等其他深度学习框架的对比 (6)

LuaJIT的FFI拓展接口非常易学,可以方便地链接其他库到Torch中。Torch中还专门设计了N-Dimension array type的对象Tensor,Torch中的Tensor是一块内存的视图,同时一块内存可能有许多视图(Tensor)指向它,这样的设计同时兼顾了性能(直接面向内存)和便利性。同时,Torch还提供了不少相关的库,包括线性代数、卷积、傅里叶变换、绘图和统计等,如图2-5所示。

图片描述

图2-5  Torch提供的各种数据处理的库

Torch的nn库支持神经网络、自编码器、线性回归、卷积网络、循环神经网络等,同时支持定制的损失函数及梯度计算。Torch因为使用了LuaJIT,因此用户在Lua中做数据预处理等操作可以随意使用循环等操作,而不必像在Python中那样担心性能问题,也不需要学习Python中各种加速运算的库。不过,Lua相比Python还不是那么主流,对大多数用户有学习成本。Torch在CPU上的计算会使用OpenMP、SSE进行优化,GPU上使用CUDA、cutorch、cunn、cuDNN进行优化,同时还有cuda-convnet的wrapper。Torch有很多第三方的扩展可以支持RNN,使得Torch基本支持所有主流的网络。和Caffe类似的是,Torch也是主要基于Layer的连接来定义网络的。Torch中新的Layer依然需要用户自己实现,不过定义新Layer和定义网络的方式很相似,非常简便,不像Caffe那么麻烦,用户需要使用C++或者CUDA定义新Layer。同时,Torch属于命令式编程模式,不像Theano、TensorFlow属于声明性编程(计算图是预定义的静态的结构),所以用它实现某些复杂操作(比如beam search)比Theano和TensorFlow方便很多。

Lasagne

官网网址: 
GitHub:github.com/Lasagne/Lasagne

Lasagne是一个基于Theano的轻量级的神经网络库。它支持前馈神经网络,比如卷积网络、循环神经网络、LSTM等,以及它们的组合;支持许多优化方法,比如Nesterov momentum、RMSprop、ADAM等;它是Theano的上层封装,但又不像Keras那样进行了重度的封装,Keras隐藏了Theano中所有的方法和对象,而Lasagne则是借用了Theano中很多的类,算是介于基础的Theano和高度抽象的Keras之间的一个轻度封装,简化了操作同时支持比较底层的操作。Lasagne设计的六个原则是简洁、透明、模块化、实用、聚焦和专注。

Keras

官方网址:keras.io 
GitHub:github.com/fchollet/keras

Keras是一个崇尚极简、高度模块化的神经网络库,使用Python实现,并可以同时运行在TensorFlow和Theano上。它旨在让用户进行最快速的原型实验,让想法变为结果的这个过程最短。Theano和TensorFlow的计算图支持更通用的计算,而Keras则专精于深度学习。Theano和TensorFlow更像是深度学习领域的NumPy,而Keras则是这个领域的Scikit-learn。它提供了目前为止最方便的API,用户只需要将高级的模块拼在一起,就可以设计神经网络,它大大降低了编程开销(code overhead)和阅读别人代码时的理解开销(cognitive overhead)。它同时支持卷积网络和循环网络,支持级联的模型或任意的图结构的模型(可以让某些数据跳过某些Layer和后面的Layer对接,使得创建Inception等复杂网络变得容易),从CPU上计算切换到GPU加速无须任何代码的改动。因为底层使用Theano或TensorFlow,用Keras训练模型相比于前两者基本没有什么性能损耗(还可以享受前两者持续开发带来的性能提升),只是简化了编程的复杂度,节约了尝试新网络结构的时间。可以说模型越复杂,使用Keras的收益就越大,尤其是在高度依赖权值共享、多模型组合、多任务学习等模型上,Keras表现得非常突出。Keras所有的模块都是简洁、易懂、完全可配置、可随意插拔的,并且基本上没有任何使用限制,神经网络、损失函数、优化器、初始化方法、激活函数和正则化等模块都是可以自由组合的。Keras也包括绝大部分state-of-the-art的Trick,包括Adam、RMSProp、Batch Normalization、PReLU、ELU、LeakyReLU等。同时,新的模块也很容易添加,这让Keras非常适合最前沿的研究。Keras中的模型也都是在Python中定义的,不像Caffe、CNTK等需要额外的文件来定义模型,这样就可以通过编程的方式调试模型结构和各种超参数。在Keras中,只需要几行代码就能实现一个MLP,或者十几行代码实现一个AlexNet,这在其他深度学习框架中基本是不可能完成的任务。Keras最大的问题可能是目前无法直接使用多GPU,所以对大规模的数据处理速度没有其他支持多GPU和分布式的框架快。Keras的编程模型设计和Torch很像,但是相比Torch,Keras构建在Python上,有一套完整的科学计算工具链,而Torch的编程语言Lua并没有这样一条科学计算工具链。无论从社区人数,还是活跃度来看,Keras目前的增长速度都已经远远超过了Torch。

MXNet

官网网址:mxnet.io 
GitHub:github.com/dmlc/mxnet

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzfjws.html