第一章 Blobs, Layers, and Nets:Caffe模型解析
1.1Blob的存储与交换
blob维数为NCHW。blob按行为主存储。例如一个卷积层中有96个3通道的1111的滤波器,blob维度为96311*11。
1.1.1实现细节
一个blob中存储了两块数据——data(普通数据)和diff(梯度)。
1.2Layer的计算和连接
- 一个 layer层通过bottom和top传输数据。每个layer定义了三种重要的运算:setup,forward,backward。
- caffe自定义layer很容易(但我还不会,之后得学)。
1.3Net的定义和操作
- Net::Init()进行网络初始化。主要实现两个操作:创建blobs和layers以搭建整个网络DAG图。初始化会检查网络结构是否正确,并会打印信息。
- 网络构建完成后,通过设置
Caffe::mode()
函数中的Caffe::set_mode()
实现在CPU或GPU上运行。
1.3.1模型格式
模型格式用protobuf语言定义在caffe.proto文件中。
第二章Forward and Backward(前传/反传)
2.1
2.2
2.3Caffe 中前传和反传的实现
Net::Forward()
和Net::Backward()
方法实现网络的前传和后传,而Layer::Forward()
和Layer::Backward()
计算每一层的前传后传。- 每一层都有
forward_{cpu,gpu}()
和backward_{cpu,gpu}()
方法来适应不同的计算模式。由于条件限制或者为了使用便利,一个层可能仅实现了CPU 或者GPU 模式。
第三章Loss
3.1Loss weights
通过在层定义中添加一个loss_weight:<float>
字段到该层的top,任何层都可以作为一个loss。。对于带后缀 。对于带后缀Loss层来说,有个隐式的loss_weight:1
,对普通层来说,有个隐式的loss_weight:0
。
第四章 Solver
4.1
caffe支持solvers包括:
type:"SGD"随机梯度下降
type:“RMSProp”
4.2方法
4.2.1SGD
超参数设定有:学习率α和动量μ。