深度学习框架
Keras
Keras是一个高层神经网络API,Keras由纯Python编写而成并基Tensorflow、Theano以及CNTK后端。Keras 为支持快速实验而生,能够把你的idea迅速转换为结果,如果你有如下需求,请选择Keras:
Keras中文学习地址
简易和快速的原型设计(keras具有高度模块化,极简,和可扩充特性)
支持CNN和RNN,或二者的结合
无缝CPU和GPU切换
Keras适用的Python版本是:Python 2.7-3.6
Keras的设计原则是
用户友好:Keras是为人类而不是天顶星人设计的API。用户的使用体验始终是我们考虑的首要和中心内容。Keras遵循减少认知困难的最佳实践:Keras提供一致而简洁的API, 能够极大减少一般应用下用户的工作量,同时,Keras提供清晰和具有实践意义的bug反馈。
模块性:模型可理解为一个层的序列或数据的运算图,完全可配置的模块可以用最少的代价自由组合在一起。具体而言,网络层、损失函数、优化器、初始化策略、激活函数、正则化方法都是独立的模块,你可以使用它们来构建自己的模型。
易扩展性:添加新模块超级容易,只需要仿照现有的模块编写新的类或函数即可。创建新模块的便利性使得Keras更适合于先进的研究工作。
与Python协作:Keras没有单独的模型配置文件类型(作为对比,caffe有),模型由python代码描述,使其更紧凑和更易debug,并提供了扩展的便利性。
一 TensorFlow
ensorFlow是一款开源的数学计算软件,使用数据流图(Data Flow Graph)的形式进行计算。图中的节点代表数学运算,而图中的线条表示多维数据数组(tensor)之间的交互。TensorFlow灵活的架构可以部署在一个或多个CPU、GPU的台式以及服务器中,或者使用单一的API应用在移动设备中。TensorFlow最初是由研究人员和Google Brain团队针对机器学习和深度神经网络进行研究所开发的,目前开源之后可以在几乎各种领域适用。
Data Flow Graph: 使用有向图的节点和边共同描述数学计算。graph中的nodes代表数学操作,也可以表示数据输入输出的端点。边表示节点之间的关系,传递操作之间互相使用的多位数组(tensors),tensor在graph中流动——这也就是TensorFlow名字的由来。一旦节点相连的边传来了数据流,节点就被分配到计算设备上异步的(节点间)、并行的(节点内)执行。
二 Caffe
Caffe由加州大学伯克利的PHD贾扬清开发,全称Convolutional Architecture for Fast Feature Embedding,是一个清晰而高效的开源深度学习框架,目前由伯克利视觉学中心(Berkeley Vision and Learning Center,BVLC)进行维护。(贾扬清曾就职于MSRA、NEC、Google Brain,他也是TensorFlow的作者之一,目前任职于Facebook FAIR实验室。)
Caffe基本流程:Caffe遵循了神经网络的一个简单假设——所有的计算都是以layer的形式表示的,layer做的事情就是获得一些数据,然后输出一些计算以后的结果。比如说卷积——就是输入一个图像,然后和这一层的参数(filter)做卷积,然后输出卷积的结果。每一个层级(layer)需要做两个计算:前向forward是从输入计算输出,然后反向backward是从上面给的gradient来计算相对于输入的gradient,只要这两个函数实现了以后,我们就可以把很多层连接成一个网络,这个网络做的事情就是输入我们的数据(图像或者语音等),然后来计算我们需要的输出(比如说识别的标签),在训练的时候,我们可以根据已有的标签来计算损失和gradient,然后用gradient来更新网络的参数。
Caffe的优势:
上手快:模型与相应优化都是以文本形式而非代码形式给出
速度快:能够运行最棒的模型与海量的数据
模块化:方便扩展到新的任务和设置上
开放性:公开的代码和参考模型用于再现
社区好:可以通过BSD-2参与开发与讨论
三 Torch
Torch是一个有大量机器学习算法支持的科学计算框架,其诞生已经有十年之久,但是真正起势得益于Facebook开源了大量Torch的深度学习模块和扩展。Torch另外一个特殊之处是采用了编程语言Lua(该语言曾被用来开发视频游戏)。
Torch的优势:
构建模型简单
高度模块化
快速高效的GPU支持
通过LuaJIT接入C
数值优化程序等
可嵌入到iOS、Android和FPGA后端的接口
四 Theano
2008年诞生于蒙特利尔理工学院,Theano派生出了大量深度学习Python软件包,最著名的包括Blocks和Keras。Theano的核心是一个数学表达式的编译器,它知道如何获取你的结构。并使之成为一个使用numpy、高效本地库的高效代码,如BLAS和本地代码(C++)在CPU或GPU上尽可能快地运行。它是为深度学习中处理大型神经网络算法所需的计算而专门设计的,是这类库的首创之一(发展始于2007年),被认为是深度学习研究和开发的行业标准。
Theano的优势:
集成NumPy-使用numpy.ndarray
使用GPU加速计算-比CPU快140倍(只针对32位float类型)
有效的符号微分-计算一元或多元函数的导数
速度和稳定性优化-比如能计算很小的x的函数log(1+x)的值
动态地生成C代码-更快地进行计算
广泛地单元测试和自我验证-检测和诊断多种错误
灵活性好

其它框架: