IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> FLOPs、FLOPS、Params的含义及PyTorch中的计算方法 -> 正文阅读

[人工智能]FLOPs、FLOPS、Params的含义及PyTorch中的计算方法

FLOPs、FLOPS、Params的含义及PyTorch中的计算方法

含义解释

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

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

  3. Params:没有固定的名称,大小写均可,表示模型的参数量,也是用来衡量算法/模型的复杂度。

在这里插入图片描述

FLOPs与模型时间复杂度、GPU利用率有关,Params与模型空间复杂度、显存占用有关。即我们常见的nvidia-smi命令中的GPU利用率(红框)和显存占用(篮框)。

MAC

MAC:Multiply Accumulate,乘加运算。乘积累加运算(英语:Multiply Accumulate, MAC)是在数字信号处理器或一些微处理器中的特殊运算。实现此运算操作的硬件电路单元,被称为“乘数累加器”。这种运算的操作,是将乘法的乘积结果和累加器的值相加,再存入累加器:
a ← a + b × c a\leftarrow a+b\times c aa+b×c
使用MAC可以将原本需要的两个指令操作减少到一个指令操作,从而提高运算效率。

FLOPs的计算

以下不考虑激活函数的计算量。

卷积层

( 2 × C i × K 2 ? 1 ) × H × W × C 0 (2\times C_i\times K^2-1)\times H\times W\times C_0 (2×Ci?×K2?1)×H×W×C0?

C i C_i Ci?=输入,通道数, k k k=卷积核,尺寸, H , W H,W H,W=输出特征图空间尺寸, C o C_o Co?=输出通道数。

一个MAC算两个个浮点运算,所以在最前面 × 2 \times 2 ×2。不考虑bias时有 ? 1 -1 ?1,有bias时没有 ? 1 -1 ?1。由于考虑的一般是模型推理时的计算量,所以上述公式是针对一个输入样本的情况,即batch size=1。

理解上面这个公式分两步,括号内是第一步,计算出输出特征图的一个pixel的计算量,然后再乘以 H × W × C o H\times W\times C_o H×W×Co? 拓展到整个输出特征图。

括号内的部分又可以分为两步, ( 2 ? C i ? K 2 ? 1 ) = ( C i ? K 2 ) + ( C i ? K 2 ? 1 ) (2\cdot C_i\cdot K^2-1)=(C_i\cdot K^2)+(C_i\cdot K^2-1) (2?Ci??K2?1)=(Ci??K2)+(Ci??K2?1)。第一项是乘法运算数,第二项是加法运算数,因为 n n n 个数相加,要加 n ? 1 n-1 n?1 次,所以不考虑bias,会有一个 ? 1 -1 ?1,如果考虑bias,刚好中和掉,括号内变为 2 ? C i ? K 2 2\cdot C_i\cdot K^2 2?Ci??K2

全连接层

全联接层: ( 2 × I ? 1 ) × O (2\times I-1)\times O (2×I?1)×O

I I I=输入层神经元个数 , O O O=输出层神经元个数。

还是因为一个MAC算两个个浮点运算,所以在最前面 × 2 \times 2 ×2。同样不考虑bias时有 ? 1 -1 ?1,有bias时没有 ? 1 -1 ?1。分析同理,括号内是一个输出神经元的计算量,拓展到 O O O了输出神经元。

NVIDIA Paper [2017-ICLR]

笔者在这里放上 NVIDIA 在[2017-ICLR]的论文:[PRUNING CONVOLUTIONAL NEURAL NETWORKS FOR RESOURCE EFFICIENT INFERENCE][https://openreview.net/forum?id=SJGCiw5gl] 的附录部分FLOPs计算方法截图放在下面供读者参考。
在这里插入图片描述

使用PyTorch直接输出模型的Params(参数量)

import torch 
from torchvision.models import resnet50
import numpy as np

Total_params = 0
Trainable_params = 0
NonTrainable_params = 0

model = resnet50()
for param in model.parameters():
    mulValue = np.prod(param.size())  # 使用numpy prod接口计算参数数组所有元素之积
    Total_params += mulValue  # 总参数量
    if param.requires_grad:
        Trainable_params += mulValue  # 可训练参数量
    else:
        NonTrainable_params += mulValue  # 非可训练参数量

print(f'Total params: {Total_params / 1e6}M')
print(f'Trainable params: {Trainable_params/ 1e6}M')
print(f'Non-trainable params: {NonTrainable_params/ 1e6}M')

输出:

Total params: 25.557032M
Trainable params: 25.557032M
Non-trainable params: 0.0M

使用thop库来获取模型的FLOPs(计算量)和Params(参数量)

安装

直接pypi安装即可

pip install thop

使用

我们使用thop库来计算vgg16模型的计算量和参数量。

import torch
from thop import profile
from archs.ViT_model import get_vit, ViT_Aes
from torchvision.models import resnet50

model = resnet50()
input1 = torch.randn(4, 3, 224, 224) 
flops, params = profile(model, inputs=(input1, ))
print('FLOPs = ' + str(flops/1000**3) + 'G')
print('Params = ' + str(params/1000**2) + 'M')

输出:

FLOPs = 16.446058496G
Params = 25.557032M

Ref:

https://openreview.net/forum?id=SJGCiw5gl

https://www.zhihu.com/question/65305385/answer/451060549

https://www.cnblogs.com/chuqianyu/p/14254702.html

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 10:51:48  更:2021-09-05 11:02:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 16:51:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码