在深度学习领域,Caffe框架是人们没法绕过的一座山。这不只是由于它不管在结构、性能上,仍是在代码质量上,都称得上一款十分出色的开源框架。更重要的是,它将深度学习的每个细节都原本来本地展示出来,大大下降了人们学习研究和开发的难度。linux
1、从Caffe的开发中了解到的用户需求:
深度学习的框架总会不断改变,Caffe也会有被新框架代替的一天。可是在开发Caffe的过程当中,贾扬清发现你们喜欢的框架其实有着不少类似的地方,这些闪光点拥有很长的生命周期,发现并掌握人们这些共同偏好将为之后开发新的框架积累经验。
Caffe之因此广受欢迎多是由于有如下的四个特色:
一、 稳定的模型架构
Caffe经过Protobuf来定义一个网络的结构,而这个由Google开源的库具备优秀的版本兼容性。随着Caffe的框架源码的不断更新迭代,以前定义的网络结构依然能兼容解析,模型仍然能正确加载运行。
二、较好的设备抽象
合理的设备抽象可以精简代码,提升框架适用性。在这方面Caffe作了比较好的尝试,模型的训练和使用与不一样的平台耦合比较低,只要平台能解析网络结构并读取二进制的模型参数,就能运行该模型。这样大大拓展了框架的应用范围,天然更加符合用户的使用需求。
三、清晰的说明教程
如何让首次接触到框架的人经过说明教程就能最快地熟悉运用,这对于一个新面世的框架来讲尤其重要。以Caffe为例,用户只须要将官方文档的例子跑一遍,基本就能清楚Caffe的操做过程和细节,这给它的普遍传播提供了最坚实的基础。
四、开放的模型仓库
目前Caffe还维护了一个Model Zoo, 许多论文的做者会将模型发布到这里,其它用户能够利用这些材料轻松地将模型复现,还能够在github上参与开发讨论,从而更深刻地学习实践。android
2、现有深度学习框架的侧重点:
一、人们的需求多种多样,目前,尚未任何一种深度学习的框架可以知足人们全部的需求。对于工业界而言,从业者看重的是框架的稳定性强、数据量大、速度快、容易进行数据整合等。
二、对于学术界来讲,学者们更但愿框架容易调试、灵活性要强、迭代要快。所以,比照现有深度学习框架的特色,Theano、Torch可能会更加适合学术界,而D4J等可能就要更适合工业界一些,至于Caffe、Tensorflow等为表明的框架则是介于两者之间。
3、对将来机器学习框架设计的一些思考:
一、使用计算图 (computation graph)
Caffe框架在实现网络的forward, backward, update时,是经过Solver, Net, Layer之间递进地逐步回调对应的forward, backward, update来实现的,在加入并行化以后,为了用计算来覆盖数据传输的时间,这些回调的运用会变得相对复杂。
所以,目前许多框架都在往computation graph的风格上偏移。这种基于computation graph的深度学习框架不只在网络的更新方面更加直接,并且在并行方面,不管是数据并行方式仍是模型并行方式,都能作到接近线性的提速。你们将来也能够在这个方向作些尝试。
二、高效方便地输入数据
对于Caffe用户而言,首要问题即是如何导入数据。尤为是在算法比较简单时,保证数据输入的高效性将成为制约模型的首要因素。以前进行的某个项目里,在8个GPU(Titan X)上训练AlexNet,须要达到每秒钟处理1600张图片(3.14GB/s)的要求。甚至对于另一些模型而言,还须要更多的吞吐量。若是数据接口没有作好,是绝对没法达到这样的要求的。
三、更快的速度
网络结构实现须要在灵活性和速度上进行权衡,这种权衡能够体如今框架设计的粗细粒度上。例如一个Inception的结构,是作成像Caffe这样经过各个层的累积来造成,仍是直接由Conv2D, BiasAdd, Relu这样的基本计算来直接构造一个Inception结构。这样不一样粗细粒度的构建方法体现了整个框架对速度或是灵活性的权衡。
另外,对于底层的实现,最好用硬件供应商提供的数值计算库,好比CuDNN, MKL-DNN,Accelerate,Eigen,NNPack等。
四、 可移植性
要提高框架的实用价值,就必须提高其训练出的模型的可移植性。换句话说,也就是要让框架训练出的模型具备平台无关性,包括了系统层面(windows、linux、android、iOS、OS X等)及硬件层面(CPU、GPU、FPGA、ARM等)。这就必须使得设计出的模型更加轻量。git
-----------------------------------------github
人工智能范畴及深度学习主流框架算法
工业机器人,家用机器人这些只是人工智能的一个细分应用而已。
图像识别,语音识别,推荐算法,NLP天然语言,广告算法,预测算法,数据挖掘,无人驾驶、医疗咨询机器人、聊天机器人,这些都属于人工智能的范畴。windows
人工智能如今用到的基础算法是深度学习里面的神经网络算法,具体应用场景有不一样的专业算法
实际上不少细分领域的,差异仍是不少的
机器人的对运动控制算法,图像识别算法要求比较高
像alphaGo,推荐算法,语音识别这些就主要靠深度学习算法和大数据训练了网络
深度学习的开源框架如今主流的有:caffeonspark(微软), tensorflow(google),Theano,dl4j, Torch,Keras
caffeonspark用在视觉图片识别上比较好,dl4j用在NLP上作相似问答搜索的比较多,tensorflow用在学习新的算法上比较好架构
关注主页一块儿学习交流框架