深度学习中几种常用框架的介绍
深度学习在今天之所以能够非常普及,很重要的一个原因是由于学术界和工业界贡献的各种各样的开源软件,这些开源的软件中集成了很多深度学习中用到的网络细节,也使我们的开发便捷了许多,下面我们来介绍几种深度学习中常用的框架,并将这几种框架做个对比。
1 Caffe
http://caffe.berkeleyvision.orgCaffe 框架在图像、视频领域的应用非常广泛,它的特点有以下几点:
依赖了大量的第三方库
为了读取图像,以及简单的图像处理,链接很重的 OpenCV 库Boost 来实现一些 C++ 的高级特征HD5/LMDB/LEVELDB 用来做数据的 IOProtoBuffer 使用随处可见
基于层的设计思路
Blob模块:实现了Tensor的功能,保持数据和梯度Layer模块:根据输入计算输出,同时保存权重/梯度Net模块:由多个layer组成,实现前向或后向的计算Solver模块:最优化模块,利用梯度值更新权重
Protocol Buffer技术
引入 protocol buffer技术,省去编写大量描述性的 C++代码,比如配置参数、属性变量等等方便序列化,用户可以直接阅读 prototxt文件,来了解网络结构
Prototxt.caffemodel 文件
Prototxt:用来描述网络,通过 Google 的 protobuffer 编译器直接读取/序列化 C++ 的对象caffemodel:用来保存权重文件
Caffe的训练:
需要提前做数据准备,保存为 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 等等,我们只需进入网站下载需要的模型即可拿来使用,非常方便。
2 Torch
http://torch.chTorch 可以算得上是最灵活、最容易学习的深度学习框架了,也很适合初学者学习。该框架使用的是 Lua 语言,类似于 javascript 的动态语言,LuaJit 性能高于大多数的脚本语言,结合 C语言开发非常简单。Torch 有以下三个主要特点:
灵活的框架:使用 Lua语言作为控制应用层,彻底的模块化设计
友好的交互:快速学习深度学习中各个组件的功能
全程可控的训练过程:适合实验新的网络类型
Torch 的交互式环境
所见即所得的交互式环境
基于”nn”软件包生成各种网络
训练过程全程可控
GPU/CPU切换
require(‘cutorch’)
require(‘cunn’)
切换tensor类型
开发自己定义的模块
3 TensorFlow
https://www.tensorflow.orgTensorflow 可以说是目前学者们最广泛应用的深度学习框架,它是一个用于数值计算的 Python库,可以描述一幅数据计算的数据流图(data flow graph)。TensorFlow 最初由 Google 大脑小组(隶属于 Google 机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。它有以下几点需要注意:
Google 研发主推
基于 computation graphs 计算模型
Python/C++ 语言
TensorBoard 可视化工具
多机多卡支持
它的编写书写如下:
同时它还支持使用 TensorBoard 可视化查看各种网络的输出和许多中间参数的变化过程。
小结
文章的最后,小编对以上三种框架做了一个总结
Torch 最适合初学者学习(但需要掌握 Lua语言)
TensorFlow 是目前的主流框架,应多多关注
Caffe 目前还是产品化最多的库
---------End---------
关注后回复“w”,加我私人微信
推荐阅读:阅读是投资自己最有效的方式自律是一种觉醒