深度学习入门基础CNN系列——卷积计算

简介: 卷积是数学分析中的一种积分变换的方法,在图像处理中采用的是卷积的离散形式。这里需要说明的是,在卷积神经网络中,卷积层的实现方式实际上是数学中定义的**互相关 (cross-correlation)运算**,与数学分析中的卷积定义有所不同,这里跟其他框架和卷积神经网络的教程保持一致,都使用互相关运算作为卷积的定义,具体的计算过程如 **图** 所示。

卷积计算

卷积是数学分析中的一种积分变换的方法,在图像处理中采用的是卷积的离散形式。这里需要说明的是,在卷积神经网络中,卷积层的实现方式实际上是数学中定义的互相关 (cross-correlation)运算,与数学分析中的卷积定义有所不同,这里跟其他框架和卷积神经网络的教程保持一致,都使用互相关运算作为卷积的定义,具体的计算过程如 所示。
在这里插入图片描述

互相关计算

虽然卷积层得名于卷积(convolution) 运算,但我们通常在卷积层中使用更加直观的互相关(cross-correlation) 运算。在二维卷积层中,一个二维输入数组和一个二维核(kernel)数组通过互相关运算输出一个二维数组。我们用一个具体的例子来解释二维互相关运算的含义。如上图所示。

卷积核(kernel)也被叫做滤波器(filter),假设卷积核的高和宽分别为 $k_h$和$k_w$,则将称为$k_h \times k_w$卷积,比如$3 \times 5$卷积,就是指卷积核的高为3,宽为5。


  • 如上图(a)所示:左边的图大小是$3 \times 3$,表示输入数据是一个维度为$3\times3$的二维数组;中间的图大小是$2\times2$,表示一个维度为$2\times2$的二维数组,我们将这个二维数组称为卷积核。先将卷积核的左上角与输入数据的左上角(即:输入数据的(0,0)位置)对齐,把卷积核的每个元素跟其位置对其的输入数据中的元素相乘,再把卷积相加,得到卷积输出的第一个结果:

                  $0\times1 + 1\times2 + 2\times4 + 3\times5 = 25$  (a)

图中( b ), ( c ) ,(d )计算方法与上面雷同,相信聪明的大家不需要我再过多演示。

卷积核的计算过程可以用下面的数学公式表示,其中$a$代表输入图片,$b$代表输出特征图,$w$是卷积核参数,它们都是二维数组。

                      $b[i,j] =\displaystyle \sum_{u,v}a[i + u, j+v]\cdot w[u,v]$

举例说明,加入上图中卷积核大小是$2\times2$,则$u$可以取0和1,$v$也可以取0和1,也就是说:

  $b[i,j] = a[i+0,j+0]\cdot w[0,0] + a[i+0,j+1]\cdot w[0,1] + a[i+1,j+0]\cdot w[1,0]
+a[i+1,j+1]\cdot w[1,1]$

我们可以验证一下它的正确性,当$[i,j]$取不同值的时候,根据此公式计算的结果与上图的例子是否一致。

补充:
在卷积神经网络中,一个卷积算子除了上面描述的卷积过程之外,还包括加上偏置项的操作。例如假设偏置为1,则上面卷积计算的结果为:
$$0\times1+1\times2+2\times4+3\times5 +1=26$$

$$0\times2+1\times3+2\times5+3\times6 +1=32$$

$$0\times4+1\times5+2\times7+3\times8 +1=44$$

$$0\times5+1\times6+2\times8+3\times9 +1=50$$

练习

学完知识后,我们来做一道题进行下练习,帮助我们充分掌握卷积的运算。
题目:计算卷积中一共有多少次乘法和加法操作
输入数据形状是$[10,3,224,224]$,卷积核$k_h = k_w = 3$,输出通道数为64,步幅$stride=1$,填充$p_h=p_w=1$。
则完成这样一个卷积,一共需要做多少次乘法和加法操作?

  • 提示

先看输出一个像素点需要做多少次乘法和加法操作,然后再计算总共需要的操作次数。

做题步骤:

  1. 先考虑只有一个输入通道时候的二维卷积:

假设输出是B,输入是A,先计算B的一个像素点,
在这里插入图片描述
其中,一共有9个乘法,8个加法操作。
但是一般我们输入的图片都是RGB三通道的,所以我们需要计算每个通道$B^{(c=0)}_{00},B^{(c=1)}_{00},B^{(c=2)}_{00}$,总共的乘法操作次数为$3\times9=27$,加法操作次数为$3\times8=24$次。

  1. 然后再将这些输入通道的数值相加,并且加上偏置参数 $b$

$$B_{00}=B^{(c=0)}_{00}+B^{(c=1)}_{00}+B^{(c=2)}_{00}+b$$
由于需要额外引入3次加法操作,所以最后总的加法操作次数是$24+3=27$
由此可得计算出一个像素点需要乘法操作次数是27,加法操作次数也是27。

  1. 输出特征图的大小是$[10,64,224,224]$,则总共需要乘法操作次数是:

$$27\times10\times64\times224\times224=867041280$$
加法操作次数和乘法操作次数相同都是867041280。

相关文章
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
使用TensorFlow进行深度学习入门
【5月更文挑战第11天】本文引导读者入门TensorFlow深度学习,介绍TensorFlow——Google的开源机器学习框架,用于处理各种机器学习问题。内容包括TensorFlow安装(使用pip)、核心概念(张量、计算图和会话)以及构建和训练简单线性回归模型的示例。通过这个例子,读者可掌握TensorFlow的基本操作,包括定义模型、损失函数、优化器以及运行会话。
|
5天前
|
机器学习/深度学习 PyTorch 算法框架/工具
使用Python实现卷积神经网络(CNN)
使用Python实现卷积神经网络(CNN)的博客教程
30 1
|
5天前
|
机器学习/深度学习 并行计算 算法
深度学习之解构卷积
本文介绍了卷积神经网络(CNN)的基本组成和各种卷积操作。CNN在机器视觉任务中扮演重要角色,其组件包括卷积层、pooling层、激活函数和全连接层。卷积层通过卷积核提取特征,pooling层降低维度,参数共享减少计算量。主要讨论了六种卷积类型:空洞卷积用于增加感受野,1x1卷积用于维度调节和通道融合,反卷积实现上采样,深度可分离卷积减少参数,可变形卷积适应不规则特征,3D卷积处理视频等四维数据。这些卷积操作在现代深度学习模型中广泛应用,提高了效率和性能。5月更文挑战第4天
21 2
|
10天前
|
机器学习/深度学习 人工智能 算法
【AI 初识】什么是卷积神经网络 (CNN)?
【5月更文挑战第2天】【AI 初识】什么是卷积神经网络 (CNN)?
|
11天前
|
机器学习/深度学习 自然语言处理 搜索推荐
|
12天前
|
机器学习/深度学习 PyTorch TensorFlow
【Python机器学习专栏】卷积神经网络(CNN)的原理与应用
【4月更文挑战第30天】本文介绍了卷积神经网络(CNN)的基本原理和结构组成,包括卷积层、激活函数、池化层和全连接层。CNN在图像识别等领域表现出色,其层次结构能逐步提取特征。在Python中,可利用TensorFlow或PyTorch构建CNN模型,示例代码展示了使用TensorFlow Keras API创建简单CNN的过程。CNN作为强大深度学习模型,未来仍有广阔发展空间。
|
12天前
|
机器学习/深度学习 自然语言处理 语音技术
【Python 机器学习专栏】Python 深度学习入门:神经网络基础
【4月更文挑战第30天】本文介绍了Python在深度学习中应用于神经网络的基础知识,包括神经网络概念、基本结构、训练过程,以及Python中的深度学习库TensorFlow和PyTorch。通过示例展示了如何使用Python实现神经网络,并提及优化技巧如正则化和Dropout。最后,概述了神经网络在图像识别、语音识别和自然语言处理等领域的应用,并强调掌握这些知识对深度学习的重要性。随着技术进步,神经网络的应用将持续扩展,期待更多创新。
|
14天前
|
机器学习/深度学习 算法 TensorFlow
TensorFlow 2keras开发深度学习模型实例:多层感知器(MLP),卷积神经网络(CNN)和递归神经网络(RNN)
TensorFlow 2keras开发深度学习模型实例:多层感知器(MLP),卷积神经网络(CNN)和递归神经网络(RNN)
|
14天前
|
机器学习/深度学习 Python
【深度学习入门】- Matlab实现图片去重
【深度学习入门】- Matlab实现图片去重
|
15天前
|
机器学习/深度学习 Python
【深度学习入门】- 神经网络
【深度学习入门】- 神经网络