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

Caffe的一大优势是拥有大量的训练好的经典模型(AlexNet、VGG、Inception)乃至其他state-of-the-art(ResNet等)的模型,收藏在它的Model Zoo(github.com/BVLC/ caffe/wiki/Model-Zoo)。因为知名度较高,Caffe被广泛地应用于前沿的工业界和学术界,许多提供源码的深度学习的论文都是使用Caffe来实现其模型的。在计算机视觉领域Caffe应用尤其多,可以用来做人脸识别、图片分类、位置检测、目标追踪等。虽然Caffe主要是面向学术圈和研究者的,但它的程序运行非常稳定,代码质量比较高,所以也很适合对稳定性要求严格的生产环境,可以算是第一个主流的工业级深度学习框架。因为Caffe的底层是基于C++的,因此可以在各种硬件环境编译并具有良好的移植性,支持Linux、Mac和Windows系统,也可以编译部署到移动设备系统如Android和iOS上。和其他主流深度学习库类似,Caffe也提供了Python语言接口pycaffe,在接触新任务,设计新网络时可以使用其Python接口简化操作。不过,通常用户还是使用Protobuf配置文件定义神经网络结构,再使用command line进行训练或者预测。Caffe的配置文件是一个JSON类型的.prototxt文件,其中使用许多顺序连接的Layer来描述神经网络结构。Caffe的二进制可执行程序会提取这些.prototxt文件并按其定义来训练神经网络。理论上,Caffe的用户可以完全不写代码,只是定义网络结构就可以完成模型训练了。Caffe完成训练之后,用户可以把模型文件打包制作成简单易用的接口,比如可以封装成Python或MATLAB的API。不过在.prototxt文件内部设计网络节构可能会比较受限,没有像TensorFlow或者Keras那样在Python中设计网络结构方便、自由。更重要的是,Caffe的配置文件不能用编程的方式调整超参数,也没有提供像Scikit-learn那样好用的estimator可以方便地进行交叉验证、超参数的Grid Search等操作。Caffe在GPU上训练的性能很好(使用单块GTX 1080训练AlexNet时一天可以训练上百万张图片),但是目前仅支持单机多GPU的训练,没有原生支持分布式的训练。庆幸的是,现在有很多第三方的支持,比如雅虎开源的CaffeOnSpark,可以借助Spark的分布式框架实现Caffe的大规模分布式训练。

Theano

官方网址: 
GitHub:github.com/Theano/Theano

Theano诞生于2008年,由蒙特利尔大学Lisa Lab团队开发并维护,是一个高性能的符号计算及深度学习库。因其出现时间早,可以算是这类库的始祖之一,也一度被认为是深度学习研究和应用的重要标准之一。Theano的核心是一个数学表达式的编译器,专门为处理大规模神经网络训练的计算而设计。它可以将用户定义的各种计算编译为高效的底层代码,并链接各种可以加速的库,比如BLAS、CUDA等。Theano允许用户定义、优化和评估包含多维数组的数学表达式,它支持将计算装载到GPU(Theano在GPU上性能不错,但是CPU上较差)。与Scikit-learn一样,Theano也很好地整合了NumPy,对GPU的透明让Theano可以较为方便地进行神经网络设计,而不必直接写CUDA代码。Theano的主要优势如下。

集成NumPy,可以直接使用NumPy的ndarray,API接口学习成本低。

计算稳定性好,比如可以精准地计算输出值很小的函数(像log(1+x))。

动态地生成C或者CUDA代码,用以编译成高效的机器代码。

因为Theano非常流行,有许多人为它编写了高质量的文档和教程,用户可以方便地查找Theano的各种FAQ,比如如何保存模型、如何运行模型等。不过Theano更多地被当作一个研究工具,而不是当作产品来使用。虽然Theano支持Linux、Mac和Windows,但是没有底层C++的接口,因此模型的部署非常不方便,依赖于各种Python库,并且不支持各种移动设备,所以几乎没有在工业生产环境的应用。Theano在调试时输出的错误信息非常难以看懂,因此DEBUG时非常痛苦。同时,Theano在生产环境使用训练好的模型进行预测时性能比较差,因为预测通常使用服务器CPU(生产环境服务器一般没有GPU,而且GPU预测单条样本延迟高反而不如CPU),但是Theano在CPU上的执行性能比较差。

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

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