【CNN基础】计算机如何计算卷积操作

0. 前言

对于卷积操作我们都很清楚其具体过程,不过卷积操作是如何在计算机上实现的呢?

我们当然可以按照卷积的操作那样去用一系列的for循环来实现,但效率很低下,而矩阵的乘法可以被高度优化和加速,且目前有很多现成的算法和加速包。于是问题就转换为:我们能否把卷积操作转换为矩阵的乘法?

实际上是可以的,而且还非常简单易懂。

1. 把卷积操作转换为矩阵乘法

我们先来快速回顾一下卷积的操作:假设卷积核大小为3x3,则feature map在原图上的一个感受野大小为3x3,将感受野在原图上进行滑动(一般步长stride=1),就可以得到一张feature map。D个卷积核就会得到D个feature map。

具体如何计算feature map的大小可以参考我的这篇博客:【CNN基础】计算卷积操作输出Feature Map的size
在这里插入图片描述

1.1 将卷积核化为矩阵

我们假设在某一层有D个卷积核,尺寸为K x K x C(即有C个channel,说明输入的feature map有C个channel)
在这里插入图片描述
我们把每一个KxKxC维度的卷积核拆成一个K2C长度的行向量,把D个K2C长度的行向量按行堆叠,就形成了一个Dx(K2C)的二维矩阵,如下所示:
在这里插入图片描述

1.2 将输入的Feature Map化为矩阵

我们假设输入的feature map尺寸为H x W x C,H、W为高和宽,C代表C个channel,如下图所示(卷积核大小为K x K x C)。
在这里插入图片描述

我们知道,感受野会在整个输入图像中滑动,每次滑动一个stride,假设感受野在整张图象上滑动N次。从上图可以看出,一个感受野为一K x K x C的矩形,我们将其拉伸为K2C个元素列向量,如下图所示:

在这里插入图片描述
由于感受野在输入图像上滑动了N次,每次都会产生一个K2C的列向量,我们把这些列向量按列堆叠,就形成了一个(K2C)xN的二维矩阵,如下所示:
在这里插入图片描述

1.3 矩阵乘法

我们将卷积核转换成的Dx(K2C)矩阵与输入的feature map经过感受野滑动得到的(K2C)xN矩阵进行相乘,得到DxN的二维矩阵,如下所示:

在这里插入图片描述
图片来源:同济子豪兄

最终输出D x N的二维向量的每一行代表:一个卷积核生成的feature map拉成的行向量(共N个元素)

END :)

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
卷积神经网络(Convolutional Neural Network,简称CNN)是一种深度学习模型,广泛应用于计算机视觉任务,如图像分类、目标检测和图像生成等。 CNN的基本组成部分包括卷积层(Convolutional Layer)、池化层(Pooling Layer)和全连接层(Fully Connected Layer)。 卷积层是CNN的核心,通过卷积操作提取输入数据的特征。卷积操作使用一组可学习的卷积核(或滤波器)对输入数据进行滑动窗口的方式进行计算,生成特征图(Feature Map)。特征图可以捕捉输入数据的空间结构信息。 池化层用于减小特征图的空间尺寸,并降低模型对位置的敏感性。常见的池化方式有最大池化和平均池化,它们分别选择窗口内的最大值或平均值作为池化后的值。 全连接层将池化层输出的特征图连接为一个向量,并通过多个全连接层进行分类或回归等任务。 除了上述基本组成部分,CNN还可以包含其他功能模块,如批归一化层(Batch Normalization)用于加速训练过程、激活函数层(Activation Layer)用于引入非线性等。 通过多个卷积层和池化层的堆叠,CNN可以逐渐提取输入数据的高层次特征,从而实现对复杂任务的有效建模。在训练过程中,CNN通过反向传播算法进行参数的优化,使得模型能够适应特定的任务。 希望以上基础知识能够帮助到您!如果您有更多问题,可以继续提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SinHao22

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值