Conv2d的正向传播与反向传播

本文详细介绍了Conv2D的正向传播,通过将卷积操作转换为矩阵乘法,简化计算。在反向传播部分,讨论了计算损失、卷积核权重梯度和bias梯度的细节,强调了平均处理以消除batch size影响。最后,建议通过掌握矩阵求导、batch处理和链式法则来深入理解这一过程。
摘要由CSDN通过智能技术生成

从Conv2D的正向传播说起

为了快速计算conv2d,需要将conv2d整理成两个矩阵相乘的形式,例如WX,或者其转置形式。这里以XW为例,X的每一列表示一张feature map的所有方格,也就是将一个feature map的某一个3X3或者5X5区域先展平(flatten)成行向量,再将所有的小区域的行向量纵向拼接起来组成一个大的矩阵,矩阵的维度是((map_s-filter_size+pad)/ filter_size + 1)**2X(filter_size**2)。再将所有feature map得到的列横向组合成一个大矩阵。对于权值矩阵,对应的方法处理,然后进行一次转置即可。当然,由于(AB)的转置等于B的转置乘以A的转置,上述img2col方式不是唯一的。完成img2col后,只需要进行一次矩阵相乘运算即可,矩阵相乘运算可以调用各种BLAS库在CPU或GPU上高速进行。当然,还要额外考虑的一个问题是,神经网络一般使用mini-batch进行训练,所以希望一次性把batch内的所有计算完成。可以这样思考:将batch内的多个样本看作同一个样本,也就是把输入样本全部concatenate在一起,然后就可以套用上面的过程了。再计算完成后再将不同batch的数据分开就可以了。根据上面的分析,WX的输出应该是这样的:每一列都是一个滤波器的全部输出,再回复成二维的形状即可。batch内不同样本的输出是纵向拼接在一起的,因此平均分割开即可。

代码组建思路:总的思路就是遍历,给转换后的矩阵的每一个位置赋值。有两种方式,第一种是对转换后的矩阵遍历,第一个维度是row,第二个维度是col,根据row和col的取值(当然也

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值