批处理数据的卷积层矩阵乘法的代码实现
为了高效利用矩阵乘法,一般会批量进行图像的卷积运算。令批量为B,输入数据就是4D数
据[B*H*W*D]。每个3D特征图都转变为二维大矩阵,然后按行堆叠在一起,形成一个大矩
阵。
在上述例子中,如果有B=10个输入特征图,则大矩阵X的尺寸为30250*363.
算法的核心是将局部窗口数据拉伸为行向量,然后遍历每个特征图的每一个数据窗口,使这
些行向量按行堆叠在一起即可。
例:算法代码实现
第一步:将局部敞口的数据拉伸为行向量,然后比哪里每个特征图的的每一个数据窗口,
使这些行向量按行堆叠在一起
1 importnumpyasnp
2 importmatplotlib.pyplotasplt
3
4 #先设置算法超参数:卷积核尺寸、步长
5 filter_size=3#卷积核尺寸
6 filter_size2=filter_size*filter_size
7 stride=1#步长
8 padding=(filter_size‐1)//2#计算0填充padding,'//'表示整数除法。
9
10 #设置输入特征图的各个参数
11 (batch,in_height,in_width,in_depth)=8,32,48,16
12 in_data=np.random.randn(batch,in_height,in_width,in_depth)#随机生
成4D的输入特征图
13
14 #计算输出特征图的尺寸
15 out_height=(in_height‐filter_size+2*padding)//stride+1#计算特
征图高度
16 out_width=(in_width‐filter_size+2*padding)//stride+1#计算特征
图宽度
17 out_size=out_height*out_width#特征图尺寸
18
19 #输出结果初始化(先用0填充,确定存储空间)
20 matric_data=np.zeros((out_size*batch,filter_size2*in_depth))#分配输
出大矩阵的存储空间,行数量为out_size*batch
21
22 #padding初始化(0填充)
23 padding_data=np.zeros((batch,in_height+2*padding,in_width+2*padd
ing,in_depth))#进行0填充
24 padding_data[:,padding:‐padding,padding:‐padding,:]=in_data#进
行0填充