cnn 反向传播推导_CNN前向传播与反向传播优化(Python)

66a687d98b9223dfc1331499c4d57826.png

CNN前向传播与反向传播基本原理

参考​blog.csdn.net

CNN前向传播与反向传播优化

干货|(DL~3)deep learning中一些层的介绍​www.zybuluo.com
e6406c6e525858d9ad146e819d7ccc4e.png

个人理解:

1、对输入图像进行采样,采样尺寸根据filter的尺寸进行设定;

2、将采样后的像素块拉伸为一个列向量;(3*3*3=27)

3、根据步长及filter的size计算出,原图可以分割为多少个patch(像素块);

例如,输入图像的尺寸为7*7,步长为2, 那么在水平方向,可以采集的patch的个数为:

(7-3)/2+1=3, 也等于特征图的宽度;同理,在竖直方向采集的patch个数为3,

那么原始图像被采集了3*3个patch,一个patch的shape=27,所以最后输出矩阵X为27*9维度的向量。

4、计算权重矩阵

对于权重矩阵的个数=filter的个数,Wshape=Fshape,这一点根据卷积的原理就可以知道,

所以W的维度为3*27;

5、输出结果

W×X的维度=(3*27)*(27*9)=3*9,3代表卷积核的个数,9代表原始图像被滑动了多少个patch,最后可以将1*9的列向量重塑为3*3*的patch。

完整代码同步在:

shellyfung/hello-world​github.com
5619fad7ca9caa6738ea0258c1f195e5.png

前向传播优化

def conv_forward_naive(x, w, b, conv_param):
    stride, pad = conv_param('stride'), int(conv_param('pad'))
    N, C, H, W = x.shape
    F, C, HH, WW = w.shape
    # x_padded = np.pad(x, ((0, 0), (0, 0), (pad, pad), (pad, pad)), mode='constant')
    H_new = 1 + (H + 2 * pad - HH) / stride
    W_new = 1 + (W + 2 * pad - WW) / stride
    H_new = int(H_new)
    W_new = int(W_new)
    s = stride
    out = np.zeros((N, F, H_new, W_new))
    # --------------
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值