LeNet5的第一层卷积运算,输入图像大小为inH * inW,卷积核c1CNum个,输出feature map大小为c1H * c1W, 偏置个数、feature map个数与卷积核个数相等。输入图像inmap:inH * inW,卷积核:c1conv: c1CNum * 5 * 5, 输出图像:c1map: c1CNum * c1H * c1W, 偏置c1bias:c1CNum
functioin ForwardC1:
for ith convolution kernel:
for hth row in feature map i:
for coth col in feature map i row h:
令curc1为c1map + i * c1H * c1W + h * c1W + co
令指针curc1指向位置的值为0
for cr in ranges 5:
for cc in ranges 5:
令curc1指向位置的值自加 (inmap[(h+cr)*inW + co +cc]乘以c1conv[i*5*5 + cr * 5 + cc])
endfor cc
endfor cr
令curc1指向位置的值自加 (c1bias[i])
将curc1指向的值输入到激活函数,输出赋给它自己
endfor co
endfor h
endfor i
endfunction ForwardC1
S2层池化,输入图像c1map: c1CNum * c1H * c1W, 输出图像:s2map: s2Num * s2H * s2W,其中s2Num = c1CNum,池化权值: s2pooling: s2Num,偏置:s2bias: s2Num
function ForwardS2:
for ith s2 feature map:
for hth row in feature map i:
for coth col in feature map i row h:
令curs2为s2map + i * s2H * s2W + h * s2W + co
令curs2指向的值 为以下四个值的均值乘以s2pooling[i] 加上s2bias[i]:
c1map[i, h * 2 * c1W, co * 2], c1map[i, h * 2 * c1W, co * 2+1], c1map[i, (h * 2 +1) * c1W, co * 2], c1map[i, (h * 2+1) * c1W, co * 2 + 1]
将curs2指向的值输入到激活函数,输出赋给它自己
endfo co
endfor h
endfor i
endfunction ForwardS2
C3层卷积:输入图像:s2map: s2Num * s2H * s2W,输出图像:c3map: c3CNum * c3H * c3W,卷积核