文章目录
- 关于框架
- Caffe
- 基于层的设计思路
- Protocol Buffer 技术
- prototxt .caffemodel文件
- caffe的训练
- 主要特点
- Torch
- LUA语言
- 主要特点
- Tensorflow
- computation graphs
- MXNET
关于框架
Caffe
依赖大量第三方库
为了读取图像,以及简单的图像处理,连接很重的Opencv库
boost来实现一些C++特征
HD5/LMDB/LEVELDB来做数据IO
ProBuffer使用随处可见
基于层的设计思路
Blob模块:实现了tensor功能,保存数据和梯度值
Layer模块:根据输入(bottom)blog计算输出(top)blog,同时保存权重/梯度
NET模块:有多个layer组成,实现forward/backward计算
SOLVER模块:最优化模块,利用梯度值更新权重
Protocol Buffer 技术
引入Protocol Buffer 技术,省去编写大量描述性的c++代码,比如配置参数,属性变量等等
方便序列化,用户可以直接阅读protext文件,来了解网络结构
prototxt .caffemodel文件
protxt描述网络,通过google的protobuffer编译器直接读取/序列化c++对象
caffemodel权重文件
caffe的训练
需要做数据准备,保存为LMDB/Leveidb格式
不用编写C++代码,直接编写.prototxt定义net对象
直接编写.protoxt定义net对象
通过参数直接执行caffe命令进行训练
第一部数据准备
准备数据文件:
通过tools/create命令产生LMDB/LEVEidb格式数据文件
第二步:编写网络文件
规则简单的,可以直接用文本编辑器生成
网络结构复杂的,利用python脚本生成
注意net protoxt文件描述的是有向无环图
复杂的网络
网络结构复杂:残差网路
层数比较多,手写非常低效
网络结构无法复用,prototxt不具备可编程性
第三步:定义solver文件
简单手动编写
第四步:训练
主要特点
技术细节全面采用c++实现
依赖proto buffer/boost开发库
gpu加速采用cuda开发
opencv仅仅是补充功能,非核心模块
Layer based
采用DSL定义网络结构
layer/blob/net/solver结构
Torch
最灵活最容易学习的深度框架
LUA语言
类似javascript动态语言,LuaJit性能高与大多数脚本语言
结合c语言开发非常简单,通过Luaffi直接调用c编写模块
主要特点
灵活的框架
使用Lua语言作为控制应用层,彻底模块化设计
友好的交互
快速学习深度学习中各个组件的功能
全程可控的训练过程
适合实验新的网络类型
Tensorflow
google研发
基于computer graphs计算模型
python/c++语言
tensorboard可视化工具
多机多卡支持
computation graphs
首先构造好整个计算链路
可以对链路进行优化
分布式调度容易实现
MXNET
与tensorflow类似,但在支持图计算的基础上,增加过程模拟,支持两种计算模型
比tensorflow更轻量