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

news2024/10/7 8:28:06

卷积计算

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

互相关计算

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

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


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

                   0 × 1 + 1 × 2 + 2 × 4 + 3 × 5 = 25 0\times1 + 1\times2 + 2\times4 + 3\times5 = 25 0×1+1×2+2×4+3×5=25  (a)

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

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

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

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

   b [ i , j ] = a [ i + 0 , j + 0 ] ⋅ w [ 0 , 0 ] + a [ i + 0 , j + 1 ] ⋅ w [ 0 , 1 ] + a [ i + 1 , j + 0 ] ⋅ w [ 1 , 0 ] + a [ i + 1 , j + 1 ] ⋅ w [ 1 , 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] b[i,j]=a[i+0,j+0]w[0,0]+a[i+0,j+1]w[0,1]+a[i+1,j+0]w[1,0]+a[i+1,j+1]w[1,1]

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

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

0 × 2 + 1 × 3 + 2 × 5 + 3 × 6 + 1 = 32 0\times2+1\times3+2\times5+3\times6 +1=32 0×2+1×3+2×5+3×6+1=32

0 × 4 + 1 × 5 + 2 × 7 + 3 × 8 + 1 = 44 0\times4+1\times5+2\times7+3\times8 +1=44 0×4+1×5+2×7+3×8+1=44

0 × 5 + 1 × 6 + 2 × 8 + 3 × 9 + 1 = 50 0\times5+1\times6+2\times8+3\times9 +1=50 0×5+1×6+2×8+3×9+1=50

练习

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

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

做题步骤:

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

  2. 然后再将这些输入通道的数值相加,并且加上偏置参数 b b b
    B 00 = B 00 ( c = 0 ) + B 00 ( c = 1 ) + B 00 ( c = 2 ) + b B_{00}=B^{(c=0)}_{00}+B^{(c=1)}_{00}+B^{(c=2)}_{00}+b B00=B00(c=0)+B00(c=1)+B00(c=2)+b
    由于需要额外引入3次加法操作,所以最后总的加法操作次数是 24 + 3 = 27 24+3=27 24+3=27
    由此可得计算出一个像素点需要乘法操作次数是27,加法操作次数也是27。

  3. 输出特征图的大小是 [ 10 , 64 , 224 , 224 ] [10,64,224,224] [10,64,224,224],则总共需要乘法操作次数是:
    27 × 10 × 64 × 224 × 224 = 867041280 27\times10\times64\times224\times224=867041280 27×10×64×224×224=867041280
    加法操作次数和乘法操作次数相同都是867041280。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/169502.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【项目实战】package.json你需要了解内容

package.json文件^和~区别 在项目开发中常引用npm包,那么package.json文件^和~区别是什么? ^意思是将当前库的版本更新到第一个数字, 例:"^4.1.0"是库会更新到4.X.X的最新版本,但不会更新到5.X.X版本。~意…

基于卷积深度神经网络的句子单子关系分类(附完整版代码)

基于卷积深度神经网络的关系分类 直接先上结果: 用于关系分类的最先进的方法主要基于统计机器学习,并且它们的性能很大程度上取决于提取的特征的质量。提取的特征通常来自预先存在的自然语言处理(NLP)系统的输出,这导致错误在现有工具中的传播和阻碍这些系统的性能。在本文…

计算机网络学习笔记(四)网络层 - 数据层面

文章目录网络层概述1.转发和路由选择2.网络服务模型网际协议1.IPv4(1) IPv4数据报格式(2)IPv4数据报分片(3)IPv4编址2.IPv6(1) IPv6数据报格式(2)IPv4迁移到IPv6网络层概述 1.转发和路由选择 网络层的作用…

【虹科回顾】2022网络安全精选内容回顾

“我们身上最有价值的东西, 不是证书和技能, 而是过去一切经历的总和。” 2022年已落幕,过去再也不会重来,无论是怎样的一年,都是我们自己生命中特别的一年。 2023年已来,我无法给您提供证书或者技能&a…

Jupyter Lab 的 10 个有用技巧

JupyterLab是 Jupyter Notebook「新」界面。它包含了jupyter notebook的所有功能,并升级增加了很多功能。它最大的更新是模块化的界面,可以在同一个窗口以标签的形式同时打开好几个文档,同时插件管理非常强大,使用起来要比jupyter…

el-date-picker实现通过其他方式触发日期选择器

el-date-picker 目前只能通过点击input输入框触发日期选择器,项目中需要通过其他方式触发日期选择器同时把input输入框去掉,如点击按钮 该模块由于后端接口数据传输限制 在前面文章里做了些许改动。 需求左右切换 可以快速找到年份,于是添加…

大数据技术架构(组件)——Hive:环境准备3

1.0.2、服务启动在搭建Hadoop的环节中,已经将Hadoop服务启动了,这里将Hive Metastore服务启动hive --service metastore1.0.2.1、服务端启动Debug模式为了方便学习,大家可以在IDEA中打开Terminal,开启debug模式和metastore服务启动…

C++设计模式实践——线上购物系统

一、系统的主要目标与功能 在本次设计中,考虑到目前疫情反复不断,为了方便群众,超市都推出在线购物并有配送员送货,于是我设计了一个超市在线网上购物送货的系统,这个系统的主要目标是帮助人们在家里购买自己需要的套…

Rust 学习笔记

参考自Rust 程序设计语言 简体中文版 1. Hello world 2. Cargo(Rust 的构建系统和包管理器) 使用 Cargo 创建项目 Cargo 配置文件 Cargo 目录结构 构建并运行 Cargo 项目 发布(release)构建 Cargo 常用命令 cargo build&#xf…

【青训营】Go的测试

Go的测试 测试主要包括:回归测试、集成测试、单元测试 一、单元测试 其中测试单元可以是函数,也可以是模块 规则: 1.所有测试文件都以_test.go结尾 2.测试函数命名规范:func TestXxx(*Testing.T) 3.初始化逻辑需要放置在TestMain中 以下是…

django框架【待续】

目录简介MVC与MTV模型MVCMTV创建项目目录生命周期静态文件配置(无用)启动django[启动](https://www.cnblogs.com/xiaoyuanqujing/articles/11902303.html)路由分组无名分组有名分组路由分发反向解析反向解析结合分组名称空间re_path与path自定义转换器视…

为什么普通人赚钱这么难?普通人的赚钱之路在哪里

前几天听一个老家的朋友说辛辛苦苦一整年,发现并没有赚到什么钱。付出与收入不成正比。首先要知道勤奋、努力并不一定就能够赚到钱像送外卖的,工地上班的,厂里上班的哪个不勤奋但他们即使非常努力工作一个月,扣除基本开支&#xf…

这是一篇知识帖:终于能明白云原生技术的概念和可落地的应用分享

随着云计算的发展和普及,云原生概念的热度也越来越高,到底什么是云原生?和我们日常工作有什么关系?本文是向大家介绍云原生技术的概念和要点,帮助大家快速了解和学习云原生,,便于大家了解工作的…

【PHP了解】PHP脚本语言基础

PHP PHP 文件的默认文件扩展名是 “.php”PHP 文件通常包含 HTML 标签和一些 PHP 脚本代码 例&#xff1a; <!DOCTYPE html> <html> <body><?php xxxxxxxxxxxxxxxxx; ?></body> </html>语法 代码框架 <?php 开始&#xff0c;以 ?…

DW动手学数据分析Task1:数据加载及探索性数据分析

目录1 数据载入1.1 载入数据1.2 read_csv和read_table的区别1.3 逐块读取1.4 修改表头和索引2 数据初步观察2.1 查看数据基本信息2.2 保存数据3 pandas数据结构和列操作3.1 Series 和DataFrame3.2 查看 DataFrame数据每列的名称和值3.3 DataFrame 的列删除和隐藏4 数据筛选4.1 …

如何合并pdf?来看这几个方法!

我们经常在整理文件的时候经常会选择将一些常用文件的格式改为pdf&#xff0c;因为这种文件格式就算发送给了别人&#xff0c;别人也不能随意的修改文件内容&#xff0c;这就保证了我们的文件内容的隐私安全。不过&#xff0c;对于处理pdf文件&#xff0c;我们还是会面临一些不…

c++ dynamic_cast,static_cast,const_cast,reinterpret_cast四种cast用法整理

在C中主要分为四种cast&#xff0c;分别是&#xff1a;static_cast、dynamic_cast、const_cast和reinterpret_cast dynamic_cast动态类型转换 首先&#xff0c;我们明确基类和派生类之间的两个转换术语 向上转换(upcast)&#xff1a;派生类向基类转换 向下站还(downcast)&…

证券服务应用评测系列:海通e海通财发布9.0版本,探索证券APP持续提升用户体验

易观分析&#xff1a;APP作为券商机构线上服务的入口&#xff0c;其活跃用户规模和运营水平在一定程度上能够体现机构战略定位、品牌运营、科技创新、用户竞争等综合实力。易观分析认为&#xff0c;如何围绕用户进行创新&#xff0c;利用技术将壁垒升高&#xff0c;打造具有品牌…

PuTTY installation directory must be on a local hard drive

putty安装问题 问题描述&#xff1a;安装时候报错&#xff0c;installation directory must be on a local hard drive 解决方案&#xff0c;无法解决。 很多人使用了这个方法解决了。但是我解决不了。 1、如果是exe类型的&#xff0c;直接右击以管理员身份运行。 2、如果是…

常用的文件类型大全(建议收藏)

文件格式格式图标格式概况mpg文件mpg是一种常见的视频格式,mpeg标准主要有以下五个,MPEG-1、MPEG-2、MPEG-4、MPEG-7及MPEG-21等。mpg有可能是基于MPEG-1(VCD)或MPEG-2torrent文件torrent文件(扩展名为.torrent)包含了一些BT下载所必须的信息,根据BitTorrent协议,文件发布者…