Caffe 的核心模块有三个,分别是 Blobs、Layers 和 Nets。Blobs 用来进行数据存
储、数据交互和处理,通过 Blobs,统一制定了数据内存的接口。Layers 是神经网络
的核心,定义了许多层级结构,它将 Blobs 视为输入输出。Nets 是一系列 Layers 的
集合,并且这些层结构通过连接形成一个网图。
卷积神经网络(CNN)一般包含卷积层、池化层(pooling layer)和 SoftMax 层。
池化层,也称为抽样层,主要是将图像中对不同位置的特征进行聚合。这样做是
因为经过卷积层的图像具有一种“局部性”,图像每个像素点(或者说特征)周围应
该和该点具有较大的相似度。例如,可以使用图像某个区域中特定特征的平均值 (或
最大值)来表示该区域的整体特征。这样做不仅可以降低数据维度(相比使用所有提
取得到的特征),同时还会改善结果(不容易过拟合)。典型的池化技术有以下三种:
a) 均值池化(mean-pooling):选择特定区域中所有值的均值。
b) 最大池化(max-pooling):选择特定区域中值最大的值。
c) 随机池化(stachastic-pooling):随机选择特定区域中的任意一个值。
SoftMax 层
逻辑回归(logistic regression)只能用于二分类,然而当需要进行多分类时,逻
辑回归便不能适用。SoftMax 回归是逻辑回归的改进,主要解决多分类问题。
caffe实现一个卷积层
layer{ //花括号内为配置信息
name: "conv1" //指定该层的名字为 conv1
type:CONVOLUTION //指定该层的的类型为卷积层(CONVOLUTION)
bottom: "data" //数据输入
top: "conv1" //数据输出
convolution_para{ //卷积层的配置参数
num_output: 96 //输出的卷积核个数
kernel_size: 11 //卷积核大小
stride: 4 //相邻卷积核的间隔
weight_filler {
type: "gaussian"//高斯滤波器
std: 0.01 //标准差 0.01
}
…
}
…
}
caffe实现一个池化层
layer { //花括号内为配置信息
name: "pool1" //指定该层的名字为 pool1
type: "Pooling" //指定该层的的类型为池化层(Pooling)
bottom: "conv1" //数据输入
top: "pool1" //数据输出
pooling_param {
pool: MAX //采用最大池化
kernel_size: 3 //池化区域是 3x3
stride: 2 //相邻池化区域的间隔
}
}
softmax层
layer {
name: "prob" //指定该层的名字为 prob
type: "Softmax"//指定该层的的类型为 SoftMax 层(Softmax)
bottom: "fc8" //数据输入
top: "prob" //数据输出
}