1.首先确定一下,CNN 和 DNN 最大的区别只有局部连接和权值共享。其他任何的变化都可以归为这两点。
2.声明几个符号
IH input高
IW input宽
OH output 高
OW ouput 宽
IC input channel
OC output channel
F 卷积核高和宽
P input padding
S 滑动步长
3 网络结构
Input -> conv1->S2->conv3->S4->C5->F6->F7->output
4. 各层参数分析
Input 32x32x1
conv1 卷积层
Input 32x32
卷积核大小 5x5
卷积核种类 6
卷积核参数量 1x5x5x6
output featuremap 尺寸 28 = 32-5+1
output featuremap size = 神经元数量 28x28x6
可训练参数 (5x5x1+1)* 6 每个滤波器5x5x1个参数+1个bias 参数, 一共6个滤波器
连接数 (5x5x1+1)*6*28*28 = (kernel_size+1) * (output featuremap size) = 可训练参数* OH * OW
S2 池化层
input 28x28x6
采样区域 2x2
采样方式 4个输入相加,乘以一个可训练参数,加上一个bias, 结果通过sigmod。每层可训练参数不同。等价于特殊的depthwise conv。
output featuremap size 14x14x6
连接数 (2x2+1)*14*14*6
conv3 卷积层
Input 14x14x6
卷积核大小 5x5
卷积核种类 16
output featuremap 尺寸 10 = 14-5+1
output featuremap size = 神经元数量 10x10x16
可训练参数
6 *(5x5x3+1)+6*(5*5*4+1)+3*(4*5*5+1)+1*(6*5*5+1) = 1516
连接数 = 10*10*1516 = 151600
S4 池化层
input 10x10x16
采样区域 2x2
采样方式 4个输入相加,乘以一个可训练参数,加上一个bias, 结果通过sigmod。每层可训练参数不同。等价于特殊的depthwise conv。
output featuremap size 5x5x16
连接数 (2x2+1)*5*5*16
conv5 卷积层
请注意,该层与全连接层并不相同
Input 5x5x16
卷积核大小 5x5
卷积核种类 120
卷积核参数量 16x5x5x120
output featuremap 尺寸 1 = 5-5+1
output featuremap size = 神经元数量 1x1x120
可训练参数 (5x5x1+1)* 120 每个滤波器5x5x1个参数+1个bias 参数, 一共6个滤波器
连接数 (5x5x1+1)*120*1*1 = (kernel_size+1) * (output featuremap size) = 可训练参数* OH * OW
Fc6 全连接层
input 120
output featuremap = 神经元数量 = 84
可训练参数 (120 +1)* 84 也可以理解为 (1x1x120+1)* 84 的卷积 卷积核为1x1
计算输入与权重向量之间的点积,再加上一个偏置,结果通过sigmoid函数输出。
其中84 = 7*12, 用这84个像素可以表示ASCII 中的一个符号。
Fc7
input 84
output 10
激活函数 softmax
该层有84x10个链接