卷积操作的参数量和FLOPs

卷积操作的参数量和FLOPs卷积操作的参数量和FLOPs  这里首先需要辨析一个概念就是FLOPs和FLOPS可以看到简写的差别仅仅是一个字母大小写的区别。  FLOPS(floating-pointoperationspersecond),这个缩写长这个样子确实也很奇怪,大致概念就是指每秒浮点数运算次数,最后一个S是秒(second)的缩写,是计组中的概念,用来描述计算机的运算速度。  FLOPs(floati…

大家好,又见面了,我是你们的朋友全栈君。

卷积操作的参数量和FLOPs

  这里首先需要辨析一个概念就是FLOPs和FLOPS可以看到简写的差别仅仅是一个字母大小写的区别。
  FLOPS(floating-point operations per second),这个缩写长这个样子确实也很奇怪,大致概念就是指每秒浮点数运算次数,最后一个S是秒(second)的缩写,是计组中的概念,用来描述计算机的运算速度。
  FLOPs(floating-point operations),一旦s变为小写,就表示复数的概念,就是浮点数运算次数,这就和计算量相关了,和卷积或者其他算法联系起来基本上就表示计算次数,可用来衡量操作的复杂程度。
  卷积的参数基本上都是说的卷积核的参数,拿一层神经网络来看,卷积核的大小是 ( k h , k w ) (k_h,k_w) (kh,kw),显然一个卷积核的参数量是这个卷积核的矩阵 k h ∗ k w k_h*k_w khkw,通常这里还要加上一个偏置 b b b,算作一个参数,为了简便计算,这里忽略不计,通常b的设置会有差异性。如果说一层神经网络的输入通道数为 C i n C_{in} Cin输出通道数为 C o u t C_{out} Cout,卷积核需要通过矩阵运算,把输入的 C i n C_{in} Cin的通道数映射为输出为 C o u t C_{out} Cout,如果熟悉卷积核矩阵乘法,我们显然知道这个卷积核的参数就是 C i n ∗ k h ∗ k w ∗ C o u t C_{in}*k_h*k_w*C_{out} CinkhkwCout,而且需要注意这只是一个卷积核的,如果有多个卷积核的还需要乘数量。
  假设我们经过这个卷积,将输入的特征图映射为 ( H , W ) (H,W) (H,W)的特征图,特征图这些部分是我们中间的计算结果,我们不需要当参数保存,所以计算参数不需要包括这部分。但是如果算卷积操作的计算量,则就用得到了。我们通过对一个区域的卷积运算,将这个区域映射为特征图中的一个cell,同样我们想矩阵的乘法,把一个矩阵乘以 { C i n , k h , k w } \left \{ C_{in},k_h,k_w \right \} {
Cinkhkw}
的卷积核变为一个1乘1的矩阵,可以理解为内积操作,所以得到这一个cell的计算量就是这么多个元素的矩阵的内积操作,显然这个计算量就是 C i n ∗ k h ∗ k w C_{in}*k_h*k_w Cinkhkw个乘法加 C i n ∗ k h ∗ k w C_{in}*k_h*k_w Cinkhkw-1个加法。但是显然我们输出的通道数是 C o u t C_{out} Cout,所以我们需要 C o u t C_{out} Cout个这样的操作。这只是求出来一个输出特征图的cell,我们需要求 H ∗ W H*W HW个cell,那么最终的计算量还需要再乘上这个值。也就是 ( 2 C i n ∗ k h ∗ k w − 1 ) ∗ C o u t ∗ H ∗ W \left(2C_{in}*k_h*k_w-1\right)*C_{out}*H*W (2Cinkhkw1)CoutHW的计算量了。
  如果有偏置常数的话,显然这个偏置常数只关系加法,而且是在内积求完之后的,所以相当于加法也变为了 C i n ∗ k h ∗ k w C_{in}*k_h*k_w Cinkhkw个,没有那个-1,然后这样算出的最终计算量就是 ( 2 C i n ∗ k h ∗ k w ) ∗ C o u t ∗ H ∗ W \left(2C_{in}*k_h*k_w\right)*C_{out}*H*W (2Cinkhkw)CoutHW
  一个cell一个cell的计算卷积,我们可以参考一张解释卷积的图。
在这里插入图片描述
  衡量计算量除了FLOPs外还有一种概念是求MACs(Multiply Accumulate)乘积累加运算次数,一次乘积,然后把这个乘积和另外一个数求和就叫一次MAC,显然与上面计算结果的关系就在于是否要乘2的关系。
  如果在本文中,发现了作者的一些错误,请及时指出,感激不尽。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/140488.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • H3C交换机常用配置命令

    H3C交换机常用配置命令一.用户配置:<H3C>system-view[H3C]superpasswordH3C   设置用户分级密码[H3C]undosuperpassword   删除用户分级密码[H3C]localuserbigheap1234561   Web网管用户设置,1(缺省)为管理级用户,缺省admin,admin[H3C]undolocaluserbigheap…

  • spring boot 加密_springboot 密码加密

    spring boot 加密_springboot 密码加密首先介绍一下jasypt的使用方法可以参考下面这篇文章:Get史上最优雅的加密方式!没有之一!版本对应的坑使用的时候还是遇到一个坑,就是jasypt的版本与springboot版本存在对应情况。可以看到jasypt是区分java7和java8的,也存在依赖spring版本的情况。自己尝试了一下在使用jasypt-spring-boot-starter的前提下 j…

  • 差分数组(简单易懂)

    差分数组(简单易懂)一、什么是差分数组?差分数组本质上来说就是一个数组,可以用O(1)的时间处理区间修改。二、差分数组的定义式设原数组为a数组,差分数组为d数组,则对于i∈[2,n],都有d[i]=a[i]-a[i-1].三、差分数组的性质1.当我们需要更新区间[l,r]时候(仅指加减运算),我们仅仅可以只更新d[l]+=x,d[r+1]-=x;2.当我们需要单独查询原数组一个点的值的时候,我们不难发现出令Sn为di的前缀和,那么a[i]=Si;3.当我们需要求原数组的前缀和的时候,我们可以设前x项

  • CAP理论应用

    CAP理论应用神一样的CAP理论被应用在何方对于开发或设计分布式系统的架构师工程师来说,CAP是必须要掌握的理论。(but:这个文章的重点并不是讨论CAP理论和细节,重点是说说CAP在微服务中的开发怎么起到一个指引作用,会通过几个微服务开发的例子说说明,尽量的去贴近开发)CAP定理又被成为布鲁尔定理,是加州大学计算机科学家埃里克·布鲁尔提出来的猜想,后来被证明成为分布式计算领域公认的定理。不过布…

  • JQuery安装与下载教程

    JQuery安装与下载教程jQuery安装与下载JQuery是一个javaScript库,是一个轻量级的”写的少,做的多”的JavaScript库。jQuery极大地简化javaScript编程–juery相比js优点:jquery的onload加载事件速度更快,并且多个加载并行 【jq绑定事件都是使用的事件函数,不需要加on】; js的onloa…

  • linux修改程序文件内容,linux 批量修改文件内容

    linux修改程序文件内容,linux 批量修改文件内容如果有批量修改文件内容的需求,可参考下面这些方法1.批量查找某个目下文件的包含的内容,例如:#grep-rn或l”要找查找的文本”路径或文件rn表示匹配查找字符串的内容显示出来和行号rl表示匹配查找字符串的文件名全部显示出来比如grep-rn”aaa”/usr/local/表示/use/local目录下所有匹配”aaa”的字符串和行号grep-rl”aaa”…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号