caffe train:
1、Data预处理
2、定义网络(编辑 prototxt配置文件)
3、定义超参数(编辑 prototxt配置文件)
4、训练得到caffemodel
代码举例:以mobilefacenet为例:
name: "mobilefacenet" \名字随意起
input: "data" \数据层
input_shape {
top: "data" \一般用bottom表示输入,top表示输出
top: "label"
include{
phase : TRAIN \include写了谁就说明此时的输入在何时用,如果没有include,则表示数据既在测试test中,又在训练train中
mean_file: \用一个配置文件来进行均值的操作
scale:data上每一个像素点都是0-255,将其归一化到【0-1】
mirror:代表数据增强:0/false代表开启,1/true代表关闭
crop_size:随机裁剪更小的区域,也属于数据增强
batch_size:每次批处理的个数
backend: LMDB :选用数据的名称(LMDB、HDFS数据源)
不用数据源,直接用文件夹里的图片,就要将txt列出每个图片的路径
}
layer {
bottom: "data"
top: "conv_1_conv2d"
name: "conv_1_conv2d"
type: "Convolution"
convolution_param {
num_output: 64 \卷积核(filter)的个数
kernel_size: 3 \卷积核的大小
pad: 1 \扩充边缘,0为不扩充
stride: 2 \步长
bias_term: false
卷积层中lr_mult:控制当前层的学习率,一般偏置顶的学习率是权值学习率的两倍。
w(权值)和b(偏置项)初始化
}
}
激活函数:Relu(一般和卷积层连在一起)
layer {
bottom: "conv_1_batchnorm"
top: "conv_1_relu"
name: "conv_1_relu"
type: "PReLU"
}
全连接层:将之前提取的特征总结一下,变成向量形式
loss和softmax
reshap层
dim=0是不变的
dim=-1是自动推断大小
dropout:在前向传播或者反向传播时,杀死一些神经元防止过拟合
参数dropout_ratio是杀死多少百分比