输入层
input_param详细解释:
- dim:1 ——表示对待识别样本进行数据增广的数量,该值的大小可自行定义。但一般会进行5次crop(剪裁),将整幅图像分为多个flip。该值为10则表示会将待识别的样本分为10部分输入到网络进行识别。如果相对整幅图像进行识别而不进行图像数据增广,则可将该值设置为1.
- dim: ——该值表示处理的图像的通道数,若图像为RGB图像则通道数为3,设置该值为3;若图像为灰度图,通道数为1则设置该值为1.
- dim:28 ——图像的长度,可以通过网络配置文件(*_train_test.prototxt)中的数据输入层中的crop_size来获取。
- dim:28——图像的宽度,可以通过网络配置文件(*_train_test.prototxt)中的数据输入层中的crop_size来获取。
注:测试的图像的宽度和高度设置一定要和训练时(原图or截图)的图像的高度和宽度设置为一致。若网络配置文件中没有设置crop_size,则说明训练时使用的是原图。
数据层
Batch_size:批尺寸,该参数决定一次训练的样本数目,影响到模型的优化程度和速度。
图像数据层
当训练的数据直接为图片时,使用图像数据层。
卷积层
- lr_mult:学习率系数,最终的学习率等于该学习率系数乘以超参数中的base_lr,第一个lr_mult表示权值的学习率系数,第二个表示偏置的学习率系数。
- num_output:卷积核的个数,n个卷积核输出n个feature map,代表n个特征。
- kernel_size: 卷积核的大小。如果卷积核的长和宽不等,需要用kernel_h和kernel_w分别设定。
- stride: 卷积核移动的步长,默认为1。也可以用stride_h和stride_w来设置。
- pad:扩充的时候是左右、上下对称的,比如卷积核的大小为5*5,那么pad设置为2,则四个边缘都扩充2个像素,即宽度和高度都扩充了4个像素,这样卷积运算之后的特征图就不会变小。 也可以通过pad_h和pad_w来分别设定。
得出:
output_dimention:
例如:
width = (image_width - kernel_width )/stride + 1
(28 - 5) +1 = 24
输入是28 * 28 * 1的图像,卷积核大小为5,移动的步长为1,可以得出每个卷积核产生的feature map的大小为24 * 24 ;
卷积核的个数为20,所以输出的维度为24 * 24 * 20。
num_parameters:
由于CNN通过感受野进行了权值共享,所以同一个feature Map中神经元权值共享,所以参数个数与神经元个数无关,与卷积核大小和FeatureMap个数相关。
每个卷积核5 * 5个参数,和20个偏置参数。
num_parameters = 5 * 5 * 1 * 20 + 20 = 520(单通道图像 * 1)
倘若卷积层的输入为3维矩阵。
假设为输入11 * 11 * 20,卷积核参数为kernel_size = 5, stride = 1, num_out_put = 50
输出为 7 * 7 * 50
总参数为:5 * 5 * 20 * 50 + 50 = 2550(相当于20通道的图像作为输入)
池化层
用于减少训练参数规模。
- Pool:池化层类型。
- Kernel_size:过滤器大小。
- Stride:过滤器移动步长,一般这个参数是大于的,不然起不到减少训练参数规模的效果。
得出:
output_dimention:
输入为上一层的输出,为24 * 24 * 20
(24 - 2)/2 +1 = 11
所以该层的输出矩阵为11 * 11 * 20
池化层没有参数需要训练
全连接层
- lr_mult:学习率系数,最终的学习率等于该学习率系数乘以超参数中的base_lr,第一个lr_mult表示权值的学习率系数,第二个表示偏置的学习率系数。
- num_output:卷积核的个数,n个卷积核输出n个feature map,代表n个特征。
全连接层卷积核大小等于输入大小,卷积核不会移动,所以也不存在移动步长参数。
得出
output_dimention:
1 * 1 * 500 = 500 是一个长度为500的一维向量。
num_parameters:
n * n * 500 + 500其中n为该层的输入维度。