CNN卷积详解(三)

news2024/11/24 2:43:25

一、卷积层的计算

4 ∗ * 4的输入矩阵 I I I 和 3 ∗ * 3 的卷积核 K K K:

  • 在步长(stride)为 1 时,输出的大小为 ( 4 − 3 + 1 ) × ( 4 − 3 + 1)

计算公式:
● 输入图片矩阵 I I I 大小: w × w w × w w×w
● 卷积核 K K K k × k k × k k×k
● 步长 S S S s s s
● 填充大小(padding): p p p

o = ( w − k + 2 p ) s + 1 o = \frac{(w − k + 2p )}{s}+1 o=s(wk+2p)+1

输出图片大小为: o × o o × o o×o
● 步长为2,卷积核为33,p=0的卷积情况如下:
在这里插入图片描述
当卷积函数中padding='same’时,会动态调整 p p p 值,确保 o = w o = w o=w ,即保证输入与输出一致。例如:输入是 28
281 输出也为 28281 。
● 步长为1,卷积核为3
3,padding='same’的卷积情况如下:

在这里插入图片描述

🔍实例:
7 ∗ 7 7*7 77 的 input, 3 ∗ 3 3*3 33 的 kernel,无填充(padding=0),步长为1,则 o = ( 7 − 3 ) 1 + 1 o = \frac{(7 − 3 )}{1}+1 o=1(73)+1也即 output size 为 5 ∗ 5 5*5 55
在这里插入图片描述
7 ∗ 7 7*7 77 的 input, 3 ∗ 3 3*3 33 的 kernel,无填充(padding=0),步长为2,则 o = ( 7 − 3 ) 2 + 1 o = \frac{(7 − 3 )}{2}+1 o=2(73)+1也即 output size 为 3 ∗ 3 3*3 33
在这里插入图片描述

二、卷积层运算量的计算

在这里插入图片描述
对于第一个卷积过程涉及的计算量计算过程如下:

首先,我们需要计算卷积层的参数量。对于一个卷积核大小为 k × k k \times k k×k,输入特征图大小为 h × w × c i n h \times w \times c_{in} h×w×cin,输出特征图大小为 h ′ × w ′ × c o u t h' \times w' \times c_{out} h×w×cout的卷积层,其参数量为:

𝑃𝑎𝑟𝑎𝑚 = k 2 × c i n × c o u t k^2 \times c_{in} \times c_{out} k2×cin×cout + c o u t c_{out} cout

其中最后的 c o u t c_{out} cout是bias的数量

引自: [假设卷积核的大小为 k*k, 输入channel为M, 输出channel为N。]
(1)bias为True时:参数数量为: k × k × M × N + N k × k × M × N + N k×k×M×N+N (bias的数量与输出channel的数量是一样的)

(2)bias为False时:参数数量为: k × k × M × N k×k×M×N k×k×M×N

(3)当使用BN时,还有两个可学习的参数α和β,参数量均为N 则参数数量为: k × k × M × N + 3 × N k×k×M×N + 3×N k×k×M×N+3×N

对于本题,输入特征图大小为 100 × 100 × 128 100 \times 100 \times 128 100×100×128,输出特征图大小为 100 × 100 × 256 100 \times 100 \times 256 100×100×256,卷积核大小为 5 × 5 5 \times 5 5×5,且填充为 2,步长为 1,输出通道数为 256。因此,每个卷积层的参数量为:

𝑃𝑎𝑟𝑎𝑚 = 5 2 × 128 × 256 5^2 \times 128 \times 256 52×128×256 + 256 ≈ 8.192 × 1 0 5 8.192 \times 10^5 8.192×105

参数量会计算了,那么 F L O P s FLOPs FLOPs其实也是很简单的,就一个公式:

F L O P s t o t a l FLOPs_{total} FLOPstotal = 𝑃𝑎𝑟𝑎𝑚 × h ′ × w ′ \times h' \times w' ×h×w = 8.192 × 1 0 5 × 100 × 100 8.192 \times 10^5 \times 100 \times 100 8.192×105×100×100= 8.192 × 1 0 9 8.192 \times 10^9 8.192×109

因此,经过具有 256 个输出的 5x5 卷积层之后,输出数据为 100x100x256 的计算量是约为 8.192 × 1 0 9 F L O P s 8.192 \times 10^{9} FLOPs 8.192×109FLOPs

对于第二个卷积过程涉及的计算量计算过程如下:

首先考虑 1x1 卷积层的计算量。套用上面的公式,输入特征图大小为 100 × 100 × 128 100 \times 100 \times 128 100×100×128,输出通道数为 32,因此经过 1x1 卷积层后,输出特征图大小为 100 × 100 × 32 100 \times 100 \times 32 100×100×32,这里的bias值很小我直接省了,计算量为:

F L O P s 1 × 1 FLOPs_{1\times1} FLOPs1×1 = 1 2 × 128 × 32 × 100 × 100 = 4.096 × 1 0 7 1^2 \times 128 \times 32 \times 100 \times 100 = 4.096 \times 10^7 12×128×32×100×100=4.096×107

接下来考虑 5x5 卷积层的计算量,经过 1x1 卷积层后,输出特征图大小为 100 × 100 × 32 100 \times 100 \times 32 100×100×32,输入通道数为 32,输出通道数为 256,卷积核大小为 5x5,填充为 2,步长为 1,这里的bias值很小我直接省了,计算量为:

F L O P s 5 × 5 FLOPs_{5\times5} FLOPs5×5 = 5 2 × 32 × 256 × 100 × 100 = 2.048 × 1 0 9 5^2 \times 32 \times 256 \times 100 \times 100= 2.048 \times 10^{9} 52×32×256×100×100=2.048×109

因此,经过具有 32 个 1x1大小的卷积核的卷积层和具有 256 个5x5大小的卷积核的卷积层之后,输出数据为 100x100x256 的计算量为

F L O P s 1 × 1 + F L O P s 5 × 5 FLOPs_{1\times1} + FLOPs_{5\times5} FLOPs1×1+FLOPs5×5 2.048 × 1 0 9 2.048 \times 10^{9} 2.048×109

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

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

相关文章

【八大排序】-- 基数排序(动图演示)

基数排序(桶排序)介绍 (1)基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是通…

【环境配置】Windows10-YOLOv8运行报错

问题如下: Windows10 运行 YOLOv8 出现如下错误: Traceback (most recent call last): File “”, line 1, in File “D:\anaconda3\envs\yolov8\Lib\multiprocessing\spawn.py”, line 116, in spawn_main exitcode _main(fd, parent_sentinel) ^^^^^…

【ROS】话题通信--从理论介绍到模型实现

1.简单介绍 话题通信是ROS中使用频率最高的一种通信模式,话题通信是基于发布订阅模式的,也即:一个节点发布消息,另一个节点订阅该消息。像雷达、摄像头、GPS… 等等一些传感器数据的采集,也都是使用了话题通信,换言之…

帆软大屏2.0企业制作

 数字化观点中心 / 当前页 如何从0-1制作数据大屏,我用大白话给你解释清楚了 文 | 商业智能BI相关文章 阅读次数:18,192 次浏览 2023-06-08 11:51:49 好莱坞大片《摩天营救》中有这么一个场景:  你可以看见反派大b…

设备数字化平台的优势和应用价值

在现代工业领域,设备的高效管理和维护对于企业的运营和竞争力至关重要。而设备管理系统作为一个强大的工具,可以极大地提升设备管理和维护的效率,从而实现生产效益的最大化。本文将探讨设备数字化平台的优势和应用价值。 设备数字化平台是一款…

蓝桥杯嵌入式省一教程:(一)点亮LED

如同所有编程入门的第一个教程——打印"Hello world"一样,点亮LED可以算得上是嵌入式开发中的"Hello world",所有的单片机开发入门都从这里开始。 在点亮LED前,我们需要先了解一个重要概念——GPIO(General Purpose Inp…

【C++】queue容器

1.queue容器基本概念 2.queue常用接口 #include <iostream> using namespace std;//队列queue #include<queue>//创建Person类 class Person { public:Person(string name, int age){this->m_Name name;this->m_Age age;}string m_Name; //姓名int m_Age; …

【hive】hive中row_number() rank() dense_rank()的用法

hive中row_number() rank() dense_rank()的用法 一、函数说明 主要是配合over()窗口函数来使用的&#xff0c;通过over(partition by order by )来反映统计值的记录。 rank() over()是跳跃排序&#xff0c;有两个第二名时接下来就是第四名(同样是在各个分组内)dense_rank() …

04-分支语句和逻辑运算符

分支语句和逻辑运算符 6.1、if语句 if 结构 例子 统计输入的字符数、空格数 // if.cpp -- using the if statement #include <iostream> int main() {using std::cin; // using declarationsusing std::cout;char ch;int spaces 0;int total 0;cin.get(ch);wh…

mysql数据库设置创建时间和更新时间自动更新

1、创建时间&#xff1a;CURRENT_TIMESTAMP 2、修改时间&#xff1a;ON UPDATE CURRENT_TIMESTAMP DROP TABLE IF EXISTS mall_pay_info; CREATE TABLE mall_pay_info (id int(11) NOT NULL AUTO_INCREMENT,user_id int(11) DEFAULT NULL COMMENT 用户id,order_no bigint(20)…

IS3DH加速度计使用SPI和IIC方式读取数据LIS3DH中英文文档和测试代码

最近博主在研究一款低功耗加速度计LIS3DH&#xff0c;该加速度计有两种通信模式&#xff0c;IIC和SPI方式。IIC通信方式搞了一下 就好了&#xff0c;但是SPI方式针扎了两天才做出来&#xff0c;现在和大家分享一下心得。 开发环境&#xff1a;MDK keil5 使用芯片&#xff1a…

Centos7 配置Docker镜像加速器

daemon.json 文档说明&#xff1a; docker安装后默认没有daemon.json这个配置文件&#xff0c;需要进行手动创建&#xff0c;docker不管是在哪个平台以何种方式启动, 默认都会来这里读取配置,使用户可以统一管理不同系统下的 docker daemon 配置。 如果在daemon.json文件中进行…

Syncfusion Essential Studio JavaScrip Crack

Syncfusion Essential Studio JavaScrip Crack 数据透视表 添加了在将数据透视表导出到PDF文档时自定义列宽的支持。 签名 添加了对在特定位置绘制文本的支持。 Syncfusion Essential Studio for JavaScript在一个包中包含80多个高性能、轻量级、模块化和响应式UI组件。包括Jav…

Memory Allocators 101 - Write a simple memory allocator

Memory Allocators 101 - Write a simple memory allocator - Arjun Sreedharan BlogAboutContactPosts GoogleLinkedInGithubFacebookTwitterUMass Amherst 1:11 AM 9th 八月 20160 notes Memory Allocators 101 - Write a simple memory allocator Code related to this…

数据结构——B-树、B+树、B*树

一、B-树 1. B-树概念 B树是一种适合外查找的、平衡的多叉树。一棵m阶&#xff08;m>2&#xff09;的B树&#xff0c;是一棵平衡的M路平衡搜索树&#xff0c;它可以是空树或满足以下性质&#xff1a; &#xff08;1&#xff09;根节点至少有两个孩子。 &#xff08;2&#…

Integer中缓存池讲解

文章目录 一、简介二、实现原理三、修改缓存范围 一、简介 Integer缓存池是一种优化技术&#xff0c;用于提高整数对象的重用和性能。在Java中&#xff0c;对于整数值在 -128 到 127 之间的整数对象&#xff0c;会被放入缓存池中&#xff0c;以便重复使用。这是因为在这个范围…

UDP 的报文结构以及注意事项

UDP协议 1.UDP协议端格式 1.图中的16位UDP长度,表示整个数据报(UDP首部UDP数据)的最大长度 2.若校验和出错,会直接丢弃 2.UDP的报文结构 UDP报文主体分为两个部分:UDP报头(占8个字节)UDP载荷/UDP数据 1.源端口号 16位,2个字节 2.目的端口号 16位,2个字节 3.包长度 指示了…

laravel框架中批量更新数据

在php框架中 tp中就有批量更新封装好的 SaveAll 在laravel中有批量插入没有批量更新操作;因此我们可以自己去封装一个 然后批量进行更新操作 封装参考代码: /*** 批量更新** param $tableName 表名称* param string $pk 更新的字段* param array $multipleData 要更新的数据*…

免费SAFe敏捷工具,SAFe框架执行

Leangoo领歌覆盖了敏捷项目研发全流程&#xff0c;包括小型团队敏捷开发&#xff0c;Scrum of Scrums大规模敏捷。 Leangoo领歌是ScrumCN&#xff08;scrum.cn&#xff09;旗下的一款永久免费的敏捷研发管理工具。 Leangoo领歌覆盖了敏捷研发全流程&#xff0c;包括小型团队敏…

七、Linux操作系统下,whichfind如何使用?

1、which命令 &#xff08;1&#xff09;语法&#xff1a;which 参数 &#xff08;2&#xff09;参数&#xff1a;要查找的命令 &#xff08;3&#xff09;示例&#xff1a; 2、find命令 &#xff08;1&#xff09;find 起始路径 -name “被查找的文件名” 注意&#xff1…