CNN中的参数,计算量,FLOPs,Multi-Add(乘加),输出特征图尺寸和通道变化

news2025/6/18 8:37:11

在阅读论文时,我们会遇到参数量,FLOPS,Multi-add, CNN参数,CNN计算量等概念,通过阅读整理,这篇博客希望以最简洁的解释帮助大家理解这些基本概念。
首先,我们看一下卷积的计算方式:
在这里插入图片描述
卷积的计算方式:图片来自http://cs231n.github.io/convolutional-networks/

卷积的计算方式

上图描述了一个 553 的输入特征图边界采用1个0像素填充,利用 2 个 33 的卷积核,其步长为2进行计算的例子:最后的输出特征图是 33*2。

这个是怎么得到的呢,我先假定一些卷积相关的基本采参数:

输入特征图高:Hi,宽:wi

输入特征图的边界填充像素个数: p

卷积核尺寸(高x宽):Kh*Kw

卷积核滑动步长:s

输出特征图高:Ho,宽:Wo

则:Ho = [(Hi - Kh + 2p) / s] + 1 ,Wo = [(wi - Kw + 2p) / s] + 1

注:这里的 [x] 表示向下取整:e.g. [5 / 2] = 2

所以上图中:Ho = [5 - 3 + 21] / 2 + 1 = 3 ;Wo = [5 - 3 + 2p] / 2 + 1 = 3

由于采用了2个33的卷积核,所以输出两个特征图,其大小都为33

顺便提一句:如果我们采用的空洞卷积,则会有一个参数 d 表示膨胀率:(这里不具体解释空洞卷积的概念)

那么:Ho = [(Hi + 2p -d(Kh - 1) - 1) / s] + 1;Wo = [(Wi + 2p - d(Kw - 1) - 1) / s] + 1

当 d = 1时,表示的普通卷积,退化为前面的公式;所以大家可以直接记这个公式。

下面我们分析CNN的参数和CNN的计算量

对于一个 HiWiCi 的输入特征图经过KwKh的卷积操作并输出 HoWo*Co 的特征图有两种算数操作(即,Multi-Add)

1,乘法操作

对于Kh*Kw的卷积窗口,有 Kh*Kw*Ci 次乘法操作,因为卷积是在输入特征图上进行,而卷积是在 Ci 个通道上同时进行。

2,加法操作

对于 n 个元素求和,我们需要 n - 1次加法。而在一个卷积窗口内有 Kh * Kw * Ci 个元素。所以我们需要Kh*Kw*Ci - 1次加法操作。

卷积的参数可以理解为在一个卷积窗口内的计算个数,即输出一个卷积结果元素产生的运算操作。

CNN参数:(KhKwCi + KhKwCi - 1)* Co = (2KhKwCi - 1) Co (没有偏置bias的情况)

要知道,偏置项只有在输出特征图上才有效。

所以,如果输出才有偏置的话,那么CNN参数应该在每个输出通道上 加上一个偏置项。

CNN参数:(KhKwCi + KhKwCI - 1)* Co + Co = 2KhKw*Co

CNN的计算量就是对所有输出特征图的所有元素的求和。

CNN的计算量 = CNN参数 * Ho * Wo

CNN的计算量: (2KhKwCi - 1) Co * Ho*Wo (无偏置bias的情况)

CNN的计算量: 2KhKwCi * Co * HoWo (有偏置bias的情况)

FLOPS:注意全大写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。是一个衡量硬件性能的指标。

FLOPs:注意s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。

这里FLOPs就等于CNN的计算量。

FLOPs = (2KhKwCi - 1) Co * Ho*Wo (无偏置bias的情况)

FLOPs = 2KhKwCi * Co * HoWo (有偏置bias的情况)

通道变化:
1:输入通道个数 等于 卷积核通道个数
2:卷积核个数 等于 输出通道个数

参考:
【1】http://cs231n.github.io/convolutional-networks/
【2】https://www.zhihu.com/question/65305385
【3】https://blog.csdn.net/weixin_40671425/article/details/98057135

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

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

相关文章

【Linux】编译器-gcc/g++使用

个人主页 : zxctscl 文章封面来自:艺术家–贤海林 如有转载请先通知 文章目录 1. 前言2. 初见gcc和g3. 程序的翻译过程3.1 预处理3.1.1 宏替换 去注释 头文件展开3.1.2 条件编译 3.2 编译3.3 汇编3.4 链接 4. 链接4.1 动态链接4.2 静态链接 1. 前言 在之…

Vue+OpenLayers7入门到实战:OpenLayers7点聚合(聚散点)功能,地图缩小显示聚集数量,点击聚集点散开和地图放大后显示要素图片

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7入门到实战 前言 本章介绍如何使用OpenLayers7在地图上实现地图点聚合(聚散点)功能,实现地图缩小显示聚集数量,点击聚集点和地图放大后显示要素对应icon图片的功能。 二、依赖和使用 "ol": "7.5.2"…

【Linux】CentOS网络故障排查大揭秘: 实战攻略解读

🍎个人博客:个人主页 🏆个人专栏:Linux ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 检查网络连接状态: 检查网络配置: 重启网络服务: 检查防火墙设置: 查看日志文…

基于极大似然算法的系统参数辨识matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于极大似然算法的系统参数辨识。对系统的参数a1,b1,a2,b2分别进行估计,计算估计误差以及估计收敛曲线&#xff0…

【java】22:try-catch 异常处理

try-catch 方式处理异常说明 public static void main(String[] args) { int num1 10; int num2 0; try { int res num1 / num2; } catch (Exception e) { System.out.println(e.getMessage()); } } 注意事项 1)如果异常发生了,则异常发生后面的代码不会执行&…

SpringCloudGateway全局过滤器

文章目录 全局过滤器的作用自定义全局过滤器过滤器执行的顺序 上一篇 Gateway理论与实践 介绍的过滤器,网关提供了31种,但每一种过滤器的作用都是固定的。如果我们希望拦截请求,做自己的业务逻辑则没办法实现。 全局过滤器的作用 全局过滤器的…

户用光伏创新技术,引领光伏时代进步

户用光伏近几年由于国家政策支持力度加大,技术也在快速发展,成功引领我国光伏时代的进步,掌握核心技术必将在新能源市场中抢占主导地位! 一、制造方面 1.高效低成本晶硅太阳能电池表界面制造技术 这项技术主要涉及晶硅太阳能电池…

作业 字符数组-统计和加密

字串中数字个数 描述 输入一行字符&#xff0c;统计出其中数字字符的个数。 输入 一行字符串&#xff0c;总长度不超过255。 输出 输出为1行&#xff0c;输出字符串里面数字字符的个数。 样例 #include <iostream> #include<string.h> using namespace std; int m…

2024 ssh连接linux ,包括连接被拒的解决方案

这里以windows系统 连接 linux&#xff08;centOS&#xff09;为例&#xff1a; 一、如果windows 连接时出现&#xff1a; Permission denied, please try again. 连接被拒绝&#xff0c;做出以下修改&#xff1a; 打开linux - Terminal 输入&#xff1a;cat /etc/ssh/sshd_c…

什么是ElasticSearch的深度分页问题?如何解决?

在ElasticSearch中进行分页查询通常使用from和size参数。当我们对ElasticSearch发起一个带有分页参数的查询(如使用from和size参数)时,ElasticSearch需要遍历所以匹配的文档直到达到指定的起始点(from),然后返回从这一点开始的size个文档 在这个例子中: 1.from 参数定义…

算法设计与分析(超详解!) 第一节 算法概述

1.算法的定义 算法的非形式化定义&#xff1a;算法是规则的有限集合&#xff0c;是为解决特定问题而规定的一系列操作。 可以理解为&#xff1a;算法&#xff08;algorithm&#xff09;是指在解决问题时&#xff0c;按照某种机械的步骤一定可以得到问题的结果&#xff08;有的…

【C/C++】常量指针与指针常量的深入解析与区分(什么是const int * 与 int * const ?)

目录 一、前言 二、const 的简单介绍 三、常量指针 &#x1f50d;介绍与分析 &#x1f4f0;小结与记忆口诀 四、指针常量 &#x1f50d;介绍与分析 &#x1f4f0;小结与记忆口诀 五、总结与提炼 六、共勉 一、前言 在【C/C】的编程中&#xff0c;指针与const关键字的组合…

Java实现从本地读取CSV文件数据

一、前言 最近项目中需要实现这样一个功能&#xff0c;就是从本地读取CSV文件&#xff0c;并以指定行作为标题行&#xff0c;指定行开始作为数据读取行&#xff0c;读取数据并返回给前端&#xff0c;下面具体说下是如何通过java实现。 二、如何实现&#xff1f; 1.引入相关mav…

【vue.js】文档解读【day 4】 | 事件处理

如果阅读有疑问的话&#xff0c;欢迎评论或私信&#xff01;&#xff01; 文章目录 事件处理前言监听事件内联事件处理器方法事件处理器方法与内联事件判断在内联处理器中调用方法在内联事件处理器中访问事件参数修饰符事件修饰符按键修饰符常规按键别名系统按键别名组合按键ex…

C++篇 语 句

到目前为止&#xff0c;我们只见过两种语句&#xff1a; return 语句和表达式语句。根据语句对执行顺 序的影响&#xff0c;C 语言其余语句大多属于以下 3 大类。 选择语句&#xff1a; if 语句和 switch 语句。循环语句&#xff1a; while 语句&#xff0c; do...while 语句和…

EF类和E/F类功率放大器(能量转换器)的波形推导和理想仿真--基于Matlab和ADS

EF类和E/F类功率放大器&#xff08;能量转换器&#xff09;的波形推导和理想仿真–基于Matlab和ADS 参考论文&#xff1a;Modeling and Analysis of Class EF and Class E/F Inverters With Series-Tuned Resonant Networks(2016) 这篇文章的思路和MTT的文章A Generalized Hi…

Angular基础---HelloWorld---Day2

文章目录 1.循环语句&#xff1a; *ngfor2.循环语句&#xff1a;ngSwitch4.事件的绑定:click5.事件的绑定:input6.模版引用变量7.数据双向绑定ngModel8.动态表单控件9.动态表单空间组 文末附有代码仓库地址&#xff01;&#xff01;&#xff01; 1.循环语句&#xff1a; *ngfor…

变换,动画

面试题——需求&#xff1a;在不知道父元素与子元素的宽高时 如何让子元素在父元素内居中&#xff1f; 1.定位 父相子绝 2.子元素 top&#xff1a;50% left:50% 3.子元素 transform: translate(-50%,-50%) .parent{height: 500px;background-color: red;position: relative;}.c…

宿主机连接不上vmware中的虚拟机排查思路

1、简介 在前文中&#xff0c;我们遇到了电脑连接网络后无法浏览网页的情况&#xff0c;其中有一种方式就是将网络适配器卸载&#xff0c;然后重启机器。今天在使用vmware中的虚拟机时&#xff0c;发现和宿主机网段不一致&#xff0c;导致宿主机访问不了虚拟机&#xff0c;主要…

数字化转型导师坚鹏:科技金融政策、案例及发展研究

科技金融政策、案例及发展研究 课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不清楚科技金融有哪些利好政策&#xff1f; 不知道科技金融有哪些成功案例&#xff1f; 不知道科技金融未来发展方向&#xff1f; 课程特色&#xff1a; 以案例的方式解读原创方…