深度学习在今天之因此可以很是普及,很重要的一个缘由是因为学术界和工业界贡献的各类各样的开源软件,这些开源的软件中集成了不少深度学习中用到的网络细节,也使咱们的开发便捷了许多,下面咱们来介绍几种深度学习中经常使用的框架,并将这几种框架作个对比。javascript
http://caffe.berkeleyvision.orgCaffe 框架在图像、视频领域的应用很是普遍,它的特色有如下几点:java
为了读取图像,以及简单的图像处理,连接很重的 OpenCV 库Boost 来实现一些 C++ 的高级特征HD5/LMDB/LEVELDB 用来作数据的 IOProtoBuffer 使用随处可见python
Blob模块:实现了Tensor的功能,保持数据和梯度Layer模块:根据输入计算输出,同时保存权重/梯度Net模块:由多个layer组成,实现前向或后向的计算Solver模块:最优化模块,利用梯度值更新权重git
引入 protocol buffer技术,省去编写大量描述性的 C++代码,好比配置参数、属性变量等等方便序列化,用户能够直接阅读 prototxt文件,来了解网络结构github
Prototxt:用来描述网络,经过 Google 的 protobuffer 编译器直接读取/序列化 C++ 的对象caffemodel:用来保存权重文件微信
须要提早作数据准备,保存为 LMDB/LevelDB等格式网络
不用编写 C++代码,直接编写 .prototxt定义net对象框架
直接编写 .prototxt 定义 solver对象机器学习
经过参数直接执行 caffe 命令进行训练编辑器
下面分红四步对其进行说明:第一步:数据准备阶段xx/xx/xx.jpg label ## 每行都是这样的格式经过tools/create_xxxx命令产生LMDB/LevelDB等格式的数据文件
第二步:编写网络文件规则简单的,能够直接用文本编辑器生成,网络复杂的,利用python脚本生成。(值得注意的是net prototxt文件描述的是有向无环图)
对于复杂的网络来讲,好比残差网络,手写很容易出错,或者一些层数较多的网络,咱们均可以采用Python来编写网络结构文件
第三步:定义solver文件简单手动编写设置好须要的参数
第四步:训练网络
Caffe 还给咱们提供了 Model Zoo(网站:https://github.com/BVLC/caffe/wiki/Model-Z)里面有不少已经训练好的模型,像 AlexNet,VGG,GoogleNet 等等,咱们只需进入网站下载须要的模型便可拿来使用,很是方便。
http://torch.chTorch 能够算得上是最灵活、最容易学习的深度学习框架了,也很适合初学者学习。该框架使用的是 Lua 语言,相似于 javascript 的动态语言,LuaJit 性能高于大多数的脚本语言,结合 C语言开发很是简单。Torch 有如下三个主要特色:
灵活的框架:使用 Lua语言做为控制应用层,完全的模块化设计
友好的交互:快速学习深度学习中各个组件的功能
全程可控的训练过程:适合实验新的网络类型
所见即所得的交互式环境
require(‘cutorch’)
require(‘cunn’)
切换tensor类型
https://www.tensorflow.orgTensorflow 能够说是目前学者们最普遍应用的深度学习框架,它是一个用于数值计算的 Python库,能够描述一幅数据计算的数据流图(data flow graph)。TensorFlow 最初由 Google 大脑小组(隶属于 Google 机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可普遍用于其余计算领域。它有如下几点须要注意:
Google 研发主推
基于 computation graphs 计算模型
Python/C++ 语言
TensorBoard 可视化工具
多机多卡支持
它的编写书写以下:
同时它还支持使用 TensorBoard 可视化查看各类网络的输出和许多中间参数的变化过程。
文章的最后,小编对以上三种框架作了一个总结
Torch 最适合初学者学习(但须要掌握 Lua语言)
TensorFlow 是目前的主流框架,应多多关注
Caffe 目前仍是产品化最多的库
---------End---------
关注后回复“w”,加我私人微信
推荐阅读:阅读是投资本身最有效的方式自律是一种觉醒