当前位置: 首页 > news >正文

CNN卷积详解(三)

一、卷积层的计算

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

相关文章:

CNN卷积详解(三)

一、卷积层的计算 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 ww ●…...

使用 Amazon Redshift Serverless 和 Toucan 构建数据故事应用程序

这是由 Toucan 的解决方案工程师 Django Bouchez与亚马逊云科技共同撰写的特约文章。 带有控制面板、报告和分析的商业智能(BI,Business Intelligence)仍是最受欢迎的数据和分析使用场景之一。它为业务分析师和经理提供企业的过去状态和当前状…...

CentOS 上快速安装包管理工具Conda

要在 CentOS 上安装 Conda,您可以按照以下步骤进行操作: 1. 下载 Miniconda 或 Anaconda 安装脚本: Miniconda:适用于轻量级安装的 Miniconda 版本。 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.…...

opencv-手势识别

# HandTrackingModule.py import cv2 import mediapipe as mpclass HandDetector:"""使用mediapipe库查找手。导出地标像素格式。添加了额外的功能。如查找方式,许多手指向上或两个手指之间的距离。而且提供找到的手的边界框信息。"""…...

【SA8295P 源码分析】10 - HQX Display(OpenWFD)qcdisplaycfg_ADP_STAR_LA.xml 配置文件解析

【SA8295P 源码分析】10 - HQX Display(OpenWFD)qcdisplaycfg_ADP_STAR_LA.xml 配置文件解析 一、HQX Display 介绍1.1 OpenWF Display Driver二、HQX Display 配置文件参数解析2.1 qcdisplaycfg.xml 配置文件2.1 配置两个 DPUs in QNX2.1.1 配置 graphics_ADP_STAR.conf : …...

达梦数据库权限和预定角色介绍

概述 本文对达梦数据库数据库和对象权限及DM预定义角色及角色创建进行介绍。 1.权限管理 用户权限有两类:数据库权限和对象权限。 数据库权限主要是指针对数据库对象的创建、删除、修改的权限,对数据库备份等权限。 数据库权限一般由 SYSDBA、SYSAU…...

Python编程从入门到实践_8-8 用户的专辑_答案

Python编程从入门到实践_8-8 用户的专辑_答案 我也看了一些其他人的答案,很多的答案存在问题,每次调用函数 make_album() 后生成一个专辑字典会覆盖上次调用函数 make_album() 生成的字典,不符合题意。 我采取的解决方案是添加一个空列表 …...

HummingBird 基于 Go 开源超轻量级 IoT 物联网平台

蜂鸟(HummingBird) 是 Go 语言实现的超轻量级物联网开发平台,包含设备接入、产品管理、物模型、告警中心、规则引擎等丰富功能模块。系统采用GoLang编写,占用内存极低, 单物理机可实现百设备的连接。 在数据存储上&…...

10.小程序样式

样式 css部分样式不支持,并且添加了rpx属性,小程序开发的时候应该使用rpx,而不是px,因为rpx是将移动端的屏幕大小分为750份,会自动按设备的大小去适配;我们在开发时应该以iphone6为基准的设备进行开发&…...

Flink 流式读写文件、文件夹

文章目录 一、flink 流式读取文件夹、文件二、flink 写入文件系统——StreamFileSink三、查看完整代码 一、flink 流式读取文件夹、文件 Apache Flink针对文件系统实现了一个可重置的source连接器,将文件看作流来读取数据。如下面的例子所示: StreamExe…...

【SA8295P 源码分析】64 - QNX 与 Android GVM 显示 Dump 图片方法汇总

【SA8295P 源码分析】64 - QNX 与 Android GVM 显示 Dump 图片方法汇总 一、QNX侧1.1 surfacedump 功能1.2 screenshot 功能二、Android GVM 侧2.1 screencap -p 导出 PNG 图片2.2 screencap 不加 -p 参数,导出 RGB32 图片2.3 dumpsys SurfaceFlinger --display-id 方法系列文…...

字符串旋转(1)

目录 ​编辑 题目要求😍: 题目内容❤: 题目分析📚: 主函数部分📕:​编辑 方法一🐒: 方法二🐒🐒: 方法三🐒&#x1f…...

【SA8295P 源码分析】13 - Android GVM 虚拟机 QUPv3 UART / SPI / I2C功能配置及透传配置

【SA8295P 源码分析】13 - Android GVM 虚拟机 QUPv3 UART / SPI / I2C功能配置及透传配置 一、QUP v3 介绍二、QUP v3 UART 功能配置2.1 TrustZone 域 Uart 资源权限配置:以 QUPV3_0_SE2 为例2.2 QNX Host 域关闭 Uart 资源:以 QUPV3_0_SE2 为例2.3 Android Kernel 域使能 U…...

STM32 F103C8T6学习笔记10:OLED显示屏GIF动图取模—简易时钟—动图手表的制作~

今日尝试做一款有动图的OLED实时时钟,本文需要现学一个OLED的GIF动图取模 其余需要的知识点有不会的可以去我 STM32 F103C8T6学习笔记 系列专栏自己查阅把,闲话不多,直接开肝~~~ 文章提供源码,测试工程下载,测试效…...

大数据课程K3——Spark的常用案例

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Spark的常用案例——WordCount; ⚪ 掌握Spark的常用案例——求平均值; ⚪ 掌握Spark的常用案例——求最大值和最小值; ⚪ 掌握Spark的常用案例——TopK; ⚪ 掌握Spark的常用案例…...

85-最大矩阵

题目 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 示例 1: 输入:matrix [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,…...

8.3 【C语言】通过指针引用数组

8.3.1 数组元素的指针 所谓数组元素的指针就是数组元素的地址。 可以用一个指针变量指向一个数组元素。例如: int a[10]{1,3,5,7,9,11,13,15,17,19}; int *p; p&a[0]; 引用数组元素可以用下标法,也可以用指针法&#xf…...

基于Flink CDC实时同步PostgreSQL与Tidb【Flink SQL Client模式下亲测可行,详细教程】

文章目录 一、PostgreSQL作为数据来源(source),由flink读取1.postgre安装与配置2.flink安装与配置3.flink cdc postgre配置3.1 postgre配置(for flink cdc)3.2 flink cdc postgres的jar包下载 4.flink cdc postgre测试…...

Vue-5.编译器Idea

Vue专栏(帮助你搭建一个优秀的Vue架子) Vue-1.零基础学习Vue Vue-2.Nodejs的介绍和安装 Vue-3.Vue简介 Vue-4.编译器VsCode Vue-5.编译器Idea Vue-6.编译器webstorm Vue-7.命令创建Vue项目 Vue-8.Vue项目配置详解 Vue-9.集成(.editorconfig、…...

qiuzhiji3

本篇想介绍一下慧与,这里的工作氛围和企业文化令人难忘,希望更多人了解它 也想探讨一下不同的文化铸就的不同企业,究竟有哪些差别。 本篇将从我个人角度出发描述慧与。 2022/3/16至2023/7/31 本篇初次写于2023年8月20日 说起来在毕业之前那段…...

JavaSec-RCE

简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性&#xff0c…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

PHP和Node.js哪个更爽?

先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: ​onCreate()​​ ​调用时机​:Activity 首次创建时调用。​…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...