快速卷积运算_教你从何从0开始使用Numpy实现卷积层

ba66b45034aedff7a5a6e684558be65a.png

CNN中的卷积操作

卷积层是CNNs网络中可以说是最重要的层了,卷积层的主要作用是对输入图像求卷积运算。如下图所示,输入图片的维数为[c_0,h_0,w_0] ;卷积核的维数为[c_1,c_0,h_k,w_k],其中c_0在图中没有表示出来,一个卷积核可以看成由c_1个维数为[c_0,h_k,w_k]的三维滤波器组成;除了这些参数通常在计算卷积运算的时候还有一些超参数比如:stride(步长):S,padding(填充):P。

根据上面所说的参数就可以求出输出特征的维数为[c_1,h_1,w_1],其中

h_1 = (h_0-h_k+2P)/S+1,

w_1 = (w_0-w_k+2P)/S+1。

d3db0447468382555e41f0cdb7eb3b23.png

卷积的计算过程其实很简单,但不是很容易说清楚,下面通过代码来说明。

基本环境设置:

%load_ext cython #代码运行在jupyter-notebook中import matplotlib.pyplot as pltimport numpy as np%matplotlib inlineplt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plotsplt.rcParams['image.interpolation'] = 'nearest'plt.rcParams['image.cmap'] = 'gray'

卷积层计算的代码如下,想象一副图像尺寸为MxM,卷积核mxm。在计算时,卷积核与图像中每个mxm大小的图像块做element-wise相乘,然后得到的结果相加得到一个值,然后再移动一个stride,做同样的运算,直到整副输入图像遍历完,上述过程得到的值就组成了输出特征,具体运算过程还是看代码。

def conv_forward_naive(x, w, b, conv_param):

out = None

stride = conv_param['stride']

pad = conv_param['pad']

N, C, W, H = x.shape

F, C, HH, WW = w.shape

H_out = 1 + (H + 2 * pad - HH) / stride

W_out = 1 + (W + 2 * pad - WW) / stride

npad = ((0,0), (0,0), (pad,pad), (pad,pad))

x_pad = np.pad(x, pad_width=npad, mode='constant

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值