深度学习中计算量和参数量介绍、实现代码、例子

前言

理清FLOPSFLOPs大写S代表的是显卡的运算性能,小写s代表的是模型的运算次数!
FLOPS是处理器性能的衡量指标,是“每秒所执行的浮点运算次数”的缩写;
FLOPs是算法复杂度的衡量指标,是“浮点运算次数”的缩写,s代表的是复数;
例如:
在这里插入图片描述
红框中的FLOPS是大写,和显卡运算能力有关!
在这里插入图片描述
论文中,写的都是FLOPs

1 计算量和参数量

计算量指的是,我们网络运行时需要的次数,类似于时间复杂度,常见单位是FLOPs,GFLOPs,1GFlops = 1,000Flops
参数量指的是,我们网络中需要学习的参数,类似于空间复杂度,常见单位是M
显卡性能决定是否能吃下模型计算量,显卡显存决定是否能吃下模型参数量

2 统计计算量、参数量和模型内存

深度学习中,卷积层占据的计算量和参数量最大,因此给出卷积层的计算量和参数量计算公式:
参数量:

(kernel_size*kernel_size) *channel_input*channel_output

计算量:

(kernel_size*kernel_size*H*W) *channel_input*channel_output
H, W 指的是该层输入的图片大小

模型内存:

因为:一个参数大概就是一个 float4个字节,而 1kb=1024 字节
所以:模型内存 = 参数量 * 4 / 1024 /1024 = 总字节数 / 1024(换算成kb) /1024 (换算成MB)

举例:
在这里插入图片描述
AlexNet:内存计算:60000000*4/1024/1024=228>200Mb

3 源码分享

3.1 thop实现

代码:

from torchvision.models import resnet101
from thop import profile
import torch

net = resnet101(False)
X = torch.randn(1,3,256,256)
flops, params = profile(net, (X, ))
print('flops: ', flops, 'params: ', params)
print('flops: %.2f M, params: %.2f M' % (flops / 1000000.0, params / 1000000.0))

结果:
在这里插入图片描述

3.2 ptflops实现

代码:

import torchvision
from ptflops import get_model_complexity_info

model = resnet101(False)
flops, params = get_model_complexity_info(model, (3, 256, 256), as_strings=True, print_per_layer_stat=True)
print('flops: ', flops, 'params: ', params)

结果:
在这里插入图片描述
这里的GMac约等于GFLOPs,具体结果大家可以搜索一下,这个应该还是有一些出入的!

3.3 pytorch_model_summary实现各层参数量统计

代码:

import torch
import torchvision
from pytorch_model_summary import summary

net = resnet101(False)
X = torch.randn(1,3,256,256)
print(summary(net, X, show_input=False, show_hierarchical=False))

结果:
在这里插入图片描述

4 总结

  1. 影响网络参数量,和Batch没关,但是和输入数据的通道数和大小有关,大家可以自己试一下;
  2. 影响网络计算量,和Batch有关,当Batch>1时候,计算量是是Batch=1的Batch倍,大家自己试一下;

参考文献: https://blog.csdn.net/qq_40507857/article/details/118764782
参考文献: https://www.bilibili.com/video/BV1oR4y1X7xZ/?spm_id_from=333.999.0.0
参考文献:这个很不错


  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Philo`

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值