前言:
此系列文章是作者看CaffeCN官方教程中译本过程中做下的笔记,方便自己以后翻阅及有需要的人翻阅。
官方文档中译本下载地址:http://caffecn.cn/?/page/tutorial
Caffe使用blobs结构来存储,交换,处理网络中正向和反向迭代的数据(data)和导数信息(diff)。blob是Caffe中的标准数组结构。Layer是Caffe模型和计算的基本单元。Net是一系列layers和其连接的集合。Sloveing单独配置,用以解耦模型的建立与优化的过程。
1.blobs
blob是Caffe中处理和传递实际数据的数据封装包。从数学意义上讲,blob是按C风格连续存储的N维数组。
对于批量图像数据来说,blob常规的数据维度是图像数量N*通道数K*图像高度H*图像宽度W,以行为主进行存储,以致于最右面的维度更新最快。
Number(N)是每个批次处理的数据量。Channel(K)是特征维度,对于RGB图像来说,K=3。
2.Layer
Layer是Caffe模型的本质内容和执行计算的基本单元,其可进行很多运算,如convolve,pool,inner product,rectified-linear,sigmoid,元素级的数据交换,normalize,load data,softmax,hinge等。可在Caffe的Layer catalogue中查看所有操作,其囊括了绝大部分目前最前沿的深度学习任务所需的层类型。
一个layer通过bottom接受数据,通过top输出数据。
每一个layer都定义了三种重要的运算,setup(初始化),forward(前向传播),backward(反向传播)。
setup:模型初始化时充值layers及其相互间的连接。
forward:从bottom层接受数据,进行计算后输送到top层。
backward:对于给定的top层输出的梯度,计算其相对于输入的梯度,并传递到bottom层。
3.Net
Net通过合成各层的输出来计算这个函数,并通过合成各层的反向传播过程来计算来自损失函数的梯度。
准确地说,Net是由一系列层组成的有向无环(DAG)计算图。典型的Net由data layer开始,终止于loss layer。
Net使用的是一种文本建模语言来定义的(protocol buffer),学习好的模型会被序列化地存储在二进制文件protocol buffer.caffemodel中。
简单的Net定义如下:
name: "LogReg"
layer {
name: "mnist"
type: "Data"
top: "data"
top: "label"
data_param {
source: "input_leveldb"
batch_size: 64
}
}
layer {
name: "ip"
type: "InnerProduct"
bottom: "data"
top: "ip"
inner_product_param {
num_output: 2
}
}
layer {
name: "loss"
type: "SoftmaxWithLoss"
bottom: "ip"
bottom: "label"
top: "loss"
}