一、引言
本文讲解Caffe其他常用层的参数,包括:softmax_loss层,Inner Product 层, accuracy 层,reshape 层和 dropout 层及它们的参数配置。
二、softmax_loss 层
softmax_loss 层和 softmax 层的计算大致是相同的。 softmax 是一个分类器,计算的是类别的概率(likelihood),是 Logistics Regression 的一种推广。 Logistics Regression 只能用于二分类,而 softmax 可以用于多分类。
softmax 计算公式:
softmax_loss 计算公式:
不管是 softmax layer 还是 softmax_loss layer,都是没有参数的,只是层类型不同而已。
softmax_loss layer: 输出 loss 值
layer {
name: "loss"
type: "SoftmaxWithLoss"
bottom: "ip1"
bottom: "label"
top: "loss"
}
softmax layer : 输出似然值
layers {
bottom: "cls3_fc"
top: "prob"
name: "prob"
type: "Softmax"
}
三、 Inner Product 层
Inner Product 层即全连接层,把输入当作一个向量,输出也是一个简单向量(把输入数据的 blobs 的 width 和 height 全变为1)。全连接层实际上也是一种卷积层,只是它的卷积核大小和原数据大小一致,因此它的参数基本上卷积层的参数是一样的。
type | InnerProduct |
lr_mult | 学习率的系数 |
num_output | 过滤器(filfter)的个数 |
weight_filler | 权值初始化。默认为“constant",值全为0,很多时候我们用"xavier"算法来进行初始化,也可以设置为”gaussian" |
bias_filler | 偏置项的初始化,一般设置为“constant”,值全为0 |
bias_term | 是否开启偏置项,默认为true |
layer {
name: "ip1"
type: "InnerProduct"
bottom: "pool2"
top: "ip1"
param {
lr_mult: 1
}
param {
lr_mult: 2
}
inner_product_param {
num_output: 500
weight_filler {
type: "xavier"
}
bias_filler {
type: "constant"
}
}
}
四、 Accuracy 层
输出分类(预测)精确度,只有 test 阶段才有,因此需要加上 include 参数。
层类型为: Accuracy
layer {
name: "accuracy"
type: "Accuracy"
bottom: "ip2"
bottom: "label"
top: "accuracy"
include {
phase: TEST
}
}
五、Reshape 层
在不改变数据的情况下,改变输入的维度。
层类型: Reshape
layer {
name: "reshape"
type: "Reshape"
bottom: "input"
top: "output"
reshape_param {
shape {
dim: 0 # copy the dimension from below
dim: 2
dim: 3
dim: -1 # infer it from the other dimensions
}
}
}
有一个可选参数组 shape,用于指定 blob 数组的各维度的值(blob 是一个四维的数据: n*c*w*h )。
dim:0 表示维度不变,即输入和输出是系统的维度。
dim:2 或 dim:3 将原来的维度变成 2 或 3
dim:-1 表示有系统自动计算维度。数据的总量不变,系统会根据 blob 数据的其他三维来自动计算当前维的维度值。
假设原数据为: 64*3*28*28, 表示 64张 3通道的 28*28 的彩色图片,经过一下reshape 变换后,输出的结果是 64*3*14*56。
reshape_param {
shape {
dim: 0
dim: 0
dim: 14
dim: -1
}
}
六、Dropout 层
Dropout 是一个防止过拟合的 trick。可以随机让网络某些隐含层节点的权重不工作,只需要设置一个 dropout_ratio 就可以了。例子:
layer {
name: "drop7"
type: "Dropout"
bottom: "fc7-conv"
top: "fc7-conv"
dropout_param {
dropout_ratio: 0.5
}
}
七、结语
Caffe 还有很多其他的层,但用的地方不多。随着深度学习的深入,各种各样的新模型会不断的出现,对应的各种新类型的层也会不断的出现,需要自主主动学习摸索。