目录

一、初识卷积层

二、图片卷积的过程(以步长为1,无填充情况为例)

三、卷积的填充

四、卷积的步长

五、卷积的输出大小计算

六、卷积的感受野

七、卷积层的深度


一、初识卷积层

卷积层是CNN(Convolutional Neural Networks)中的基本网络层,主要用于对图像进行特征提取操作,其卷积核权重是共享权值的,对应的相关概念还包括步长,填充。卷积层在CNN中的作用如下图所示。

二、图片卷积的过程(以步长为1,无填充情况为例)

对于输入图片数据的矩阵大小为5X5,卷积核大小为3X3的部分卷积过程如下所示:

推广到任意大小输入(Input)和任意大小卷积核(Kernel)的卷积过程如下图所示:

三、卷积的填充

3.1 填充的作用
        (1)使卷积后图像分辨率不变,方便计算特征图尺寸的变化
        (2)弥补边界信息“丢失”

3.2 填充的基本过程
        填充(padding)是指在输入高和宽的两侧填充元素(通常是0元素)。下图我们在原输入高和宽的两侧分别添加了值为0的元素,使得输入高和宽从3变成了5,并导致输出高和宽由2增加到4。下图阴影部分为第一个输出元素及其计算所使用的输入和核数组元素:0×0+0×1+0×2+0×3=0。

四、卷积的步长

卷积窗口从输入数组的最左上方开始,按从左往右、从上往下的顺序,依次在输入数组上滑动。我们将每次滑动的行数和列数称为步幅或步长(stride)。

下图展示了在高上步幅为3、在宽上步幅为2的卷积运算。可以看到,输出第一列第二个元素时,卷积窗口向下滑动了3行,而在输出第一行第二个元素时卷积窗口向右滑动了2列。当卷积窗口在输入上再向右滑动2列时,由于输入元素无法填满窗口,无结果输出。下图阴影部分为输出元素及其计算所使用的输入和核数组元素:0×0+0×1+1×2+2×3=8、0×0+6×1+0×2+0×3=6。

五、卷积的输出大小计算

5.1 计算公式

在前面,已经把卷积涉及的主要概念和基本过程介绍了,接下来我们将介绍卷积输入和输出的计算关系。以二维卷积为例。
        输入:大小为的输入矩阵X
        卷积核:大小为的卷积核矩阵K
        输入填充大小:在输入的高上填充,在输入的宽上填充
        卷积核窗口滑动步长:每次计算卷积,在输入矩阵X的高上滑动h个单位,在X的宽上                                                          上滑动w个单位

设输出,经过卷积后,输出矩阵Y的大小的计算公式如下:

该公式适合卷积的三种模式:full, same, valid,动态过程参考卷积的三种模式:full, same, valid_陌上小布的博客-CSDN博客_卷积神经网络valid

5.2 计算示例

(1)示例:下图大小为3x4的输入矩阵经过大小为2x2的卷积核后,得到2x3大小的输出矩阵

1.输出矩阵大小计算过程为:

2. 代码实现及output

import torch.nn as nn
import torch# 定义一个函数来计算卷积层大小。它对输入和输出做相应的升维和降维
def comp_conv2d(conv2d, X):# (1, 1)代表批量大小和通道数X = X.view((1, 1) + X.shape)Y = conv2d(X)return Y.view(Y.shape[2:]) # 排除不关心的前两维:批量和通道#创建大小为3x4的输入矩阵
X = torch.rand(3, 4)# 卷积核为2x2, 在输入的高和宽上填充大小为(0, 0), 卷积核在高和宽上的滑动步幅为(1, 1)
conv2d = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=(2, 2), padding=(0, 0), stride=(1, 1))   #此处的Conv2d是nn的内置函数,实现卷积过程,返回值请自行查阅
print(comp_conv2d(conv2d, X).shape)output: torch.Size([2, 3])

(2)示例: 原大小为3x3的输入矩阵,大小为2x2的卷积核,将输入矩阵的高和宽填充成5x5,每次卷积核窗口在输入矩阵上高的滑动单位为3,宽的滑动单位为2,经过卷积过程后,最后得到大小为2x2的输出矩阵。

import torch.nn as nn
import torch#忽略警告
import warnings
warnings.filterwarnings("ignore")# 定义一个函数来计算卷积层大小。它对输入和输出做相应的升维和降维
def comp_conv2d(conv2d, X):# (1, 1)代表批量大小和通道数X = X.view((1, 1) + X.shape)Y = conv2d(X)return Y.view(Y.shape[2:]) # 排除不关心的前两维:批量和通道#创建大小为3x3的输入矩阵
X = torch.range(0, 8).reshape(3, 3)# # 使用高为2、宽为2的卷积核。在⾼和宽两侧的填充数分别为1和1
conv2d = nn.Conv2d(in_channels=1, out_channels=1, kernel_size=(2, 2), padding=(1, 1), stride=(3, 2))   #此处的Conv2d是nn的内置函数,实现卷积过程,返回值请自行查阅
print(comp_conv2d(conv2d, X).shape)output: torch.Size([2, 2])

六、卷积的感受野

卷积神经网络每一层输出的特征图(featuremap)上的像素点在输 入图片上映射的区域大小,即特征图上的一个点对应输入图上的区域。感受野的大小计算,采用从后往前逐层的计算方法。

七、卷积层的深度

一个卷积层通常包含多个尺寸一致的卷积核,如下图所示。

卷积神经网络之卷积层理解(持续更新)相关推荐

  1. 对卷积神经网络中卷积层、激活层、池化层、全连接层的理解

    文章目录 卷积神经网络 输入层 卷积层 激励层 池化层 全连接层 卷积神经网络 举一个卷积神经网络识别汽车的例子如下: 其中数据输入的是一张图片(输入层),CONV表示卷积层,RELU表示激励层,PO ...

  2. 深入学习卷积神经网络中卷积层和池化层的意义(转)

    为什么要使用卷积呢? 在传统的神经网络中,比如多层感知机(MLP),其输入通常是一个特征向量:需要人工设计特征,然后将这些特征计算的值组成特征向量,在过去几十年的经验来看,人工找到的特征并不是怎么好用 ...

  3. 卷积神经网络—全连接层

    卷积神经网络-全连接层 全连接层 全连接层与卷积层 全连接层与GAP(全局平均池化层) [1] https://blog.csdn.net/Touch_Dream/article/details/79 ...

  4. 关于卷积神经网络细节的深入理解

    关于卷积神经网络细节的深入理解 文章目录 Ⅰ.关于softmax,Cross-Entropy Loss,Hinge Loss,L2正则化基本概念的深入理解: 1.Softmax: 2.Cross-En ...

  5. 理解卷积神经网络的卷积计算

    引言 相信刚学卷积神经网络的人来说,要理解卷积神经网络是一件不容易的事情,我们先来看看卷积神经网络中要知道的卷积计算 相关词汇 filter = 卷积核 feature map = 卷积之后得到的输出 ...

  6. 深入学习卷积神经网络中卷积层和池化层的意义

    为什么要使用卷积呢? 在传统的神经网络中,比如多层感知机(MLP),其输入通常是一个特征向量:需要人工设计特征,然后将这些特征计算的值组成特征向量,在过去几十年的经验来看,人工找到的特征并不是怎么好用 ...

  7. 【卷积神经网络】卷积层,池化层,全连接层

    转于:<入门PyTorch> 卷积层是卷积神经网络的核心, 大多数计算都是在卷积层中进行的. 1 卷积层 1.1 概述 首先介绍卷积神经网络的参数. 这些参数是由一些可学习的滤波器集合构成 ...

  8. 人脸检测卷积神经网络_卷积神经网络和计算机视觉的人脸面具检测算法

    人脸检测卷积神经网络 In this article, we explore an application of Computer Vision that is largely relevant to ...

  9. 什么是卷积神经网络算法,卷积神经网络运算公式

    卷积公式指的是什么? 卷积公式是指两个函数f和g生成第三个函数的一种数学算子.表征函数f与经过翻转和平移的g的重叠部分的累积,如果将参加卷积的一个函数看作区间的指示函数,卷积还可以被看作是滑动平均的推 ...

最新文章

  1. 第十六届全国大学生智能车竞赛全国总决赛报名信息汇总
  2. 9. 设计二个函数分别计算sinx和cosx_工程人常用的12个excel和9个wps技巧
  3. 【JavaSE_第一周】练习题总结
  4. c语言让数组地址对齐,C语言实现比特位数组在目标空间左右居中对齐三种方式...
  5. [Cocos2d-x]Cocos2d-x 3.2 学习笔记
  6. SQL 修改表字段失败 解决方法
  7. matlab与无网格,无网格法
  8. 【深度学习】梯度消失与梯度爆炸的原因分析与解决策略
  9. 朱晔的互联网架构实践心得S1E8:三十种架构设计模式(下)
  10. python gtk_python 创建gtk应用程序
  11. 轻轻松松背单词软件测试,完美单词王app
  12. 你永远穷不过一个广东人
  13. 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 HDU - 2191(特殊01背包)
  14. 真实骑手数据:73万大学毕业生在送外卖?
  15. apache ii评分怎么评_APACHE II评分表
  16. php内核邮件群发管理系统源码
  17. 自研机器人协调控制系统(2)——六足舞蹈篇
  18. 离线语音遥控器控制红外设备
  19. 怎么判断一个数是奇数还是偶数?
  20. Docker基础篇 - (六)Docker 网络Spring Boot微服务打包Docker镜像

热门文章

  1. 2012年第8周移动游戏推荐
  2. Nightingale滴滴夜莺监控系统入门(三)--页面功能说明
  3. 传统电视急解互联网焦虑 跨界出击手游电商
  4. 大三计算机学生的自我介绍
  5. 华为/CMCC的Portal协议研究纪要
  6. 海信发布城市智慧心脏1.0
  7. Unity SF上的2017全球游戏果酱
  8. 字符编码应用的一个奇怪现象
  9. VScode 本地调试和开启本地服务器
  10. rabbitmq基础5——集群节点类型、集群基础运维,集群管理命令,API接口工具