卷积层

卷积神经网络中,最重要的就是卷积层,它负责从图片中提取特征信息。
先考虑一种最为简单的图片,一张二维的图片,那么卷积核也是二维的。

卷积运算

听上去挺高大上的,实际上就是乘积的求和。
举个例子:
假设图片是这样的

1 2 4
3 5 4

卷积核是

6 1
4 4

那么卷积运算的结果就是:
6×1+1×2+4×3+4×5=406×2+1×4+4×5+4×4=526\times 1+1\times 2 + 4\times 3 + 4\times 5 =40 \newline 6\times 2 + 1\times 4 + 4\times 5+4\times 4 =52 6×1+1×2+4×3+4×5=406×2+1×4+4×5+4×4=52

填充

通过上面简单的例子,不难发现,在经过卷积运算之后,矩阵的大小变化了。这样就会带来一个严重的问题,当不断进行卷积运算后,图片越来越小,以至于最后无法进行卷积运算。
为了解决这个问题,我们希望在进行卷积运算之后,图片的大小不发生改变,这个时候就需要往图片的边缘填充相应的值。

矩阵大小

往图片边缘填充多少,这与卷积核的大小密切相关。那么这个大小变化是否存在关系呢。答案是肯定的。
不妨设H,WH,WH,W表示原来矩阵的长和高,OH,OWOH,OWOH,OW表示经过卷积运算结果的长、高,FH,FWFH,FWFH,FW表示卷积核的长、高,PPP表示填充,SSS表示步幅。
OH=H+2⋅P−FHS+1OW=W+2⋅P−FWS+1OH =\frac{H + 2\cdot P - FH}{S}+1 \newline OW = \frac{W + 2\cdot P - FW}{S}+ 1 OH=SH+2⋅P−FH​+1OW=SW+2⋅P−FW​+1

代码实现

卷积运算的原理非常简单,而且代码实现也非常简单。
通过几个for循环就可以轻松解决,但是还有更高效的方法。
我们可以将图片中对应同一个卷积核的数字变为一行,将卷积核变为一列。然后运用矩阵乘法,就可以完美实现卷积运算,而且一次矩阵乘法就可以算出整张图片的结果。
具体如何变为一行,代码已经在下面给出。

def im2col(input_data, filter_h, filter_w, stride=1, pad=0):"""Parameters----------input_data : 由(数据量, 通道, 高, 长)的4维数组构成的输入数据filter_h : 滤波器的高filter_w : 滤波器的长stride : 步幅pad : 填充Returns-------col : 2维数组"""N, C, H, W = input_data.shapeout_h = (H + 2*pad - filter_h)//stride + 1out_w = (W + 2*pad - filter_w)//stride + 1img = np.pad(input_data, [(0,0), (0,0), (pad, pad), (pad, pad)], 'constant')col = np.zeros((N, C, filter_h, filter_w, out_h, out_w))for y in range(filter_h):y_max = y + stride*out_hfor x in range(filter_w):x_max = x + stride*out_wcol[:, :, y, x, :, :] = img[:, :, y:y_max:stride, x:x_max:stride]col = col.transpose(0, 4, 5, 1, 2, 3).reshape(N*out_h*out_w, -1)return coldef col2im(col, input_shape, filter_h, filter_w, stride=1, pad=0):"""Parameters----------col :input_shape : 输入数据的形状(例:(10, 1, 28, 28))filter_h :filter_wstridepadReturns-------"""N, C, H, W = input_shapeout_h = (H + 2*pad - filter_h)//stride + 1out_w = (W + 2*pad - filter_w)//stride + 1col = col.reshape(N, out_h, out_w, C, filter_h, filter_w).transpose(0, 3, 4, 5, 1, 2)img = np.zeros((N, C, H + 2*pad + stride - 1, W + 2*pad + stride - 1))for y in range(filter_h):y_max = y + stride*out_hfor x in range(filter_w):x_max = x + stride*out_wimg[:, :, y:y_max:stride, x:x_max:stride] += col[:, :, y, x, :, :]return img[:, :, pad:H + pad, pad:W + pad]

卷积神经网络——卷积层相关推荐

  1. 卷积神经网络---卷积层、激励层、池化层以及全连接层

    文章目录 概述 卷积神经网络 局部连接+权值共享** 输入层 卷积层 激励层 池化层 全连接层 参考资料 概述 这两天在看论文,涉及到卷积神经网络的知识,之前一直对这块迷迷糊糊.看到了一篇博文写的很好 ...

  2. 卷积神经网络各层的意义,卷积神经网络各层作用

    1.卷积神经网络结构基本单元层有哪些? 输入层:输出特征矩阵 卷积层:进行卷积运算 池化层:进行pooling缩小维度 中间激活层:可有可无,一般为ReLU类的计算简单的激活函数对特征值修正 这里卷积 ...

  3. 卷积神经网络——卷积神经网络基础

    背景:计算机视觉是一个包含很广泛的领域,包含了日常生活中所有可视化的1维,2维,3维数据,例如心跳脉冲的检测(1维),目标检测.人脸识别(2维),3维场景重建.虚拟现实(3维)等,但是处理这些数据时往 ...

  4. 卷积神经网络权重是什么,卷积神经网络卷积过程

    卷积神经网络算法是什么? 一维构筑.二维构筑.全卷积构筑. 卷积神经网络(ConvolutionalNeuralNetworks,CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedfor ...

  5. 神经网络 卷积神经网络,卷积神经网络 吴恩达

    吴恩达的人物经历 吴恩达1976年出生于伦敦,父亲是一位香港医生,英文名叫AndrewNg,吴恩达年轻时候在香港和新加坡度过. 1992年吴恩达就读新加坡莱佛士书院,并于1997年获得了卡内基梅隆大学 ...

  6. 【卷积神经网络--卷积/池化后特征图大小计算公式】

    [卷积神经网络–卷积/池化后特征图大小计算公式] 参考链接: 卷积神经网络系列之卷积/池化后特征图大小怎么计算?? torch中的Conv2d卷积的输入的Tensor张量是:[batch, chann ...

  7. 刘雪峰卷积神经网络,卷积神经网络讲解

    1.卷积神经网络通俗理解 卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Ne ...

  8. 详细解释CNN卷积神经网络各层的参数和链接个数的计算

    卷积神经网络是一个多层的神经网络,每层由多个二维平面组成,而每个平面由多个独立神经元组成. 图:卷积神经网络的概念示范:输入图像通过和三个可训练的滤波器和可加偏置进行卷积,滤波过程如图一,卷积后在C1 ...

  9. 卷积神经网络(卷积层,激活函数Relu,池化层,计算公式及API解释)

    1. 卷积神经网络 (卷积层,激活函数,池化层,全连接层) (1)  把神经网络的隐藏层分为卷积层和池化层(又叫下采样层) · 卷积层 :  通过在原始图像上平移来提取特征 ·  池化层 : 通过特征 ...

  10. YoLo卷积神经网络各层计算,卷积层计算输入的图片大小是448*448*3输出224*224*64原因?

    该部分卷积层计算输入的t图片大小是4484483的,第一层卷积层,卷积核大小是77的,步长是2,pad=1,filters=64,请问输出为什么为:224224*64? 回答:此处的pad应该类似于标 ...

最新文章

  1. Android SQLite调试
  2. 工信部 以智能制造为切入点推进互联网+
  3. java类使用其他类的变量_如何将java类中的变量加载到其他类
  4. python学习环境+开发环境的选择和配置
  5. jsf教程_JSF范围教程– JSF / CDI会话范围
  6. mysql查逻辑表的分片规则_MySQL(19) Mycat分片(分库分表)配置
  7. iOS 判断设备型号
  8. Java和线性代数的关系_高等数学,线性代数与计算机的关系?
  9. linux grep命令例子,详解linux grep命令
  10. centos8对外开发指定接口
  11. mitmproxy安装证书_在 macOS 上使用 mitmproxy 透明代理进行网络抓包
  12. 勤哲excel服务器2017试用
  13. Linux 忘记密码解决方法
  14. Python编程 whl文件安装库
  15. 6-3 jmu-python-函数-找钱 (10分)
  16. 路由器和三层交换机的搞笑文章
  17. 分享:DFC开发平台的设计理念
  18. Office 2019 Office 2016 下载地址
  19. 【OpenCV图像处理】十七、图像的导向滤波
  20. python绘制正六边形

热门文章

  1. 网页设计趋势- 撞色风
  2. 微服务系统中服务降级
  3. 在学校考的计算机一级,我想考计算机一级证,请问一下什么时候报名,在哪里报名,考些什么?谢谢...
  4. 以下关于html语言中表格的说法正确的是,html测试题(含答案)().pdf
  5. 加拿大魁北克计算机专业,计算机在加拿大魁北克就业福利
  6. linux | setfacl - - 细分文件权限
  7. SparseArray和ArrayMap
  8. Lasso regression(稀疏学习,R)
  9. DotNetty系列二:基本使用
  10. 处理Unity中使用HTC VIVE PRo的SRWork插件若干问题