Date: 2020/07/27

Coder: CW

Foreword:

相信诸位炼丹者在看paper时会注意到出现有 'FLOPs' 这个词,那么 FLOPs 究竟是什么意思呢?它是如何计算的?有哪些开源工具可供使用?

Outline

I. 什么是FLOPs?

II. 如何计算FLOPs?

III. 相关开源工具

1、torchstat

2、torchscan

3、其它

什么是FLOPs?

FLOPs(Floating Point Operations)即 浮点运算次数,常用于评估模型/算法的计算量(复杂度)。注意,此处s必须小写!因为大写S对应的是另一个概念——FLOPS(Floating Point Operations per Second),意为每秒浮点运算次数,代表的是一种运算速率,通常用于衡量硬件的性能指标。

如何计算FLOPs?

对于卷积层(不考虑激活函数的运算),令:

:表示卷积核大小;

:输入通道数;

:输出通道数;

:输出特征图的高和宽

那么生成输出特征图的一个单元(单通道)则需要:

-

次乘法

-

次加法

若算上偏置(bias),那么还需额外的一次加法,于是就有

次加法,与乘法次数一致。

由于输出特征图尺寸为(

)且通道数为

,因此该卷积层的运算次数为:

这是一个卷积层的乘加运算次数(MAdd)。

有些时候会将一次乘法和一次加法合并对应一次FLOP,那么一个卷积层的FLOPs就为

。在这种方式下,可将卷积核和输出特征图都分别看作立方体,那么FLOPs就恰好是两者体积的乘积。

卷积运算的FLOPs

同理,对于一个全连接层(不计bias),我们不难推出其FLOPs(MAdd)为:

其中

分别对应输入、输出神经元个数。

相关开源工具

1、torchstat

官方介绍:This is a lightweight neural network analyzer based on PyTorch.

This tools can show:

Total number of network parameters

Theoretical amount of floating point arithmetics (FLOPs)

Theoretical amount of multiply-adds (MAdd)

Memory usage

安装:pip install torchstat

或者使用源码方式:

python3 setup.py install

使用:from torchstat import stat

import torchvision.models as models

model = models.resnet18()

stat(model, (3, 224, 224))

效果(部分截图):

torchstat效果图

可看到这里区分了乘加运算(MAdd)与FLOPs。

2、torchscan

安装:pip install torchscan

使用:>>> import torchvision.models as models

>>> from torchscan import summary

>>> mod = models.resnet18()

>>> summary(mod, (3, 224, 224))

效果(部分截图):

torchscan效果图

注意,这里的FLOPs与torchstat的乘加运算次数(MAdd)对应,而MAC(Multiply-Accumulations)与torchstat的FLOPs对应。

3、其它

其它的还有 flops-counter、torchsummary等,感兴趣的可以自行摸索。

flops什么意思中文_不知道什么是FLOPs?进来瞧瞧~相关推荐

  1. origin9语言设置中文_英雄联盟手游怎么设置繁体 LOL手游繁中设置方法?_英雄联盟手游...

    英雄联盟手游终于在海外部分地区上线了,不过玩海外服有一点不好,就是界面都是外文,比如英文.日文.韩文等等.那么英雄联盟手游怎么设置繁体中文呢,这里就来给大家介绍一下LOL手游繁中设置方法,将游戏语言切 ...

  2. python之禅 中文_《Python之禅》中对于Python编程过程中的一些建议

    <Python之禅>中对于Python编程过程中的一些建议 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  <Python之禅>中对于Pyt ...

  3. mysql 字段 中文_如何配置mysql支持中文字段名与中文字段

    匿名用户 1级 2018-11-18 回答 中文字段名都可以了 但是中文记录不行 奇怪啊 mysql>; create table a (a char(20)); Query OK, 0 row ...

  4. java换成中文_如果我们的编程替换成中文会变成怎样?

    首先大概的看一下中文编码: 你以为会写中文就会编程吗?这就像你以为会写汉字就会写出好文章一样.编程是和机器沟通,因此要用机器的语言而不是人类的语言.最早的程序就是0和1的数字,不是中文也不是英文.以前 ...

  5. java 8进制串转中文_为什么不能用中文进行编程?而英文就可以

    前些天大雄无意间听见 几个线下班小伙伴说 真的是无(te)意(di)的 "我要补英文" "对,英文真的很重要" "如果编码用中文就好了" . ...

  6. kodi刮削器 中文_教你PLEX插件播放4K不能使用KODI解码导致卡顿的解决办法

    文章作者Hao4K用户@nothero 自从买了这个索尼9500g,三天两头的出问题,而且还经常重启,经常卡顿.大法的画质确实不错,但是这系统稳定性实在是不敢恭维... 最近装了一个KODI-PLEX ...

  7. charles 中文_抓包工具--charles(青花瓷)及获取AppStore数据包

    #### 1.Charles Charles是一个HTTP代理/ HTTP监视器/反向代理,使开发人员能够查看他们的机器和Internet之间的所有HTTP和SSL / HTTPS通信.这包括请求.响 ...

  8. python读取文件名有中文_[请教]python的中文文件名处理

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 3 楼的可以用 sys.getfilesystemencoding 检测,但由於文件系统的差异,文件名 100% 无损转还是不太可,比如很多 *nix 的 ...

  9. tail怎么写中文_为什么不能用中文进行编程,而英文却可以?程序员的分析很透彻...

    很多人都认为程序员很厉害,而且心中对他们有一丝敬佩,那这么复杂的程序,他么究竟是怎么写出来的呢?不知道大家有没有注意一个细节,那就是编程都是英文,如果用中文去编译的话,那就是出现很多"bug ...

最新文章

  1. 获取可视区域高度赋值给div(解决document.body.clientHeight的返回值为0的问题)
  2. 任我行二 - 高德地图篇1 - 显示地图
  3. 26.进程空间和线程空间
  4. 紧致差分的matlab程序,对流占优扩散方程的一种新C—N 紧致差分格式
  5. Django中的shell,和数据增删查改
  6. lede更改软件源_Linux的上传和下载——Ubuntu中软件的安装和ftp服务器的搭建
  7. 您会后悔对Lambdas应用重载!
  8. 实验一 链式存储结构的基本操作
  9. 图论 —— 网络流 —— 基本概念与建模技巧
  10. UIView的Touch事件UIControlEvents详解
  11. noip模拟赛 猜数字
  12. C语言编程QQ管理系统,c语言制作学生管理系统srrpqq67.doc
  13. MCSA / Windows Server 2016 安装Desktop Experience
  14. 山石岩读丨前沿领域探析——汽车CAN总线协议详解及攻击面分析
  15. 计算机进去bios方式,各种电脑进入BIOS方法汇总|进入bios的方法大全
  16. 计算机图形学(六)-光栅化、采样、走样与反走样、滤波与卷积
  17. matlab画二项式随机变量的pmf,概率中的PDF,PMF,CDF
  18. 测试开发:Docker常用命令分享
  19. MySQL修改数据表中的字段名
  20. telnet无法打开到主机的连接。 在端口 23: 连接失败

热门文章

  1. CUDA ---- Hello World From GPU
  2. 第3章 动态规划 矩阵连乘问题
  3. python的格式化输出学号_安利三个关于Python字符串格式化进阶知识
  4. Luogu P4148 简单题(K-D Tree)
  5. 洛谷P3676 小清新数据结构题(动态点分治)
  6. 虚拟机virtualBox
  7. Linux 用户操作
  8. 【springBoot】springBoot返回json的一个问题
  9. 【转】嵌入式软件:C语言编码规范
  10. js-格式化数字保留两位小数-带千分符