1. 概念
计算量(FLOPs)对应我们之前的时间复杂度,计算量要看网络执行时间的长短
PS:
FLOPS:全大写,意指每秒浮点运算次数,理解为计算速度,是一个衡量硬件性能的指标。
FLOPs:s小写,意指浮点运算数,理解为计算量,用来衡量模型的复杂度
(如果模型FLOPs为X,使用的GPU性能Y FLOPS,意味处理该模型只需X/Y秒)
参数量对应于我们之前的空间复杂度,参数量要看占用显存的量
2. 对硬件要求
- 计算量的要求是在于芯片的floaps(指的是gpu的运算能力)
- 参数量的要求是显存大小
3. 计算方式
计算量:

参数量:

BatchNorm层: 2N
PS:
常见模型大小描述方式
因为:参数都是FP32(4字节)存放,所以模型大小是参数量*4
1kb=1024字节;1MB=1024kb;1GB=1024MB;1TB=1024GB
因此:如果模型参数量为6000万个,则总的字节数是24000万字节,也就是228MB
(24000万/1024/1024)=228MB
4. 代码计算
1) 整体参数量 + 计算量
import torch
import torchvision
from thop import profile
model = torchvision.models.alexnet(pretrained=False)
dummy_input = torch.randn(1, 3, 224, 224)
flops, params = profile(model, (dummy_input,))
print('FLOPs: ', flops, 'params: ', params)
2)每层参数量 + 整体参数量 + 可训参数量
import torch
import torchvision
from pytorch_model_summary import summary
model = torchvision.models.alexnet(pretrained=False)
print(model)
dummy_input = torch.randn(1, 3, 224, 224)
print(summary(model, dummy_input, show_input=False, show_hierarchical=False))
输出:
手动计算(示例)
Conv2d-1: 3*64*11*11 + 64 = 23296
Linear-21: 4096*1000 + 1000 = 4097000
5. 常见模型计算量 & 参数量
| 模型 | 参数量(百万个) | 模型大小(MB) | 计算量(百万) |
| SqueezeNet | 1,248,424 | 4.8MB | |
| AlexNet | 60百万(1e6) | 240MB | 720 (1*3*224*224) |
| ResNet101 | 85百万 | 340MB | |
| VGG16 | 138百万 | 552MB | 15300 |
| TSN | 20MB | ||
| I3D | 60MB | ||
| ECO | 150MB | ||
| GPT-3 (OpenAI) | 1750亿(1e9) | ||
| 鹏程. 盘古 (华为) | 2000亿(1e9) | 8TB | |
| Switch Transformers (谷歌) | 1.6万亿 | ||
| 悟道2.0 (智源) | 17500亿 |
Reference:
经典神经网络参数的计算【不定期更新】 - 知乎 (zhihu.com)
(36条消息) 深度学习中模型计算量(FLOPs)和参数量(Params)的理解以及四种计算方法总结_紫芝的博客-优快云博客

本文详细介绍了计算量(FLOPs)和参数量在深度学习中的概念及其对硬件需求的影响。计算量衡量模型的复杂度,与GPU的FLOPs性能有关,而参数量则关乎模型的大小和显存占用。通过代码示例展示了如何使用PyTorch库计算AlexNet模型的FLOPs和参数量,并列举了不同模型的参数量、模型大小和计算量,如SqueezeNet、AlexNet、ResNet101和VGG16等。


82

被折叠的 条评论
为什么被折叠?



