深度学习模型计算量评价指标FLOPs, MACs, MAdds关系

在评价深度学习模型的大小和计算量时,经常使用的参数有:parameters, FLOPs, MACs, MAdds。除此以外,我们还经常见到MAC, FLOPS, GFLOPS, TFLOPS,其中,后三个参数其实并非用来评价模型的计算量,而是用来评价计算机硬件的计算能力。下面分别介绍一下以上几个参数:

这个参数表示的是模型内部总的参数数量,用来衡量模型的大小,例如一个3*3的卷积层包含10个参数,分别为卷积操作的9个参数和偏置操作的1个参数。

(Floating Point Operations) 即浮点运算次数,用来衡量模型计算复杂度,常用来做神经网络模型速度的间接衡量标准(虽然最近已经有文章证明靠FLOPs间接标准评价模型的速度是不靠谱的,因为模型的计算速度还跟内存的吞吐等因素相关,但此标准依然广泛用作模型速度的参考评价标准)。对于卷积层而言,FLOPs的计算公式如下:

FLOPs = 2 * H * W * ( Cin * K * K ) * Cout

其中,Cin是指卷积层输入tensor的通道数,Cout是指卷积层输出tensor的通道数,K是指卷积核大小,其中乘以2是因为在卷积操作中,加法次数与乘法次数相同,在卷积乘法中加法次数比乘法次数少一次,但是还需要多考虑一个卷积加法,所以总的乘法次数与加法次数相同。

(Multiply–Accumulate Operations) 即乘加累积操作数,常常与FLOPs概念混淆,实际上1MACs包含一个乘法操作与一个加法操作,大约包含2FLOPs。通常MACs与FLOPs存在一个2倍的关系。 MACsMAdds说的是一个东西。

(memory access cost)即内存使用量,用来评价模型在运行时的内存占用情况。1×1卷积的FLOPs为 2 * H * W * Cin * Cout。对应的MAC为H * W * (Cin + Cout) + Cin * Cout(这里假定内存足够)。

(Floating Point Operations Per Second) 即每秒浮点运算次数,它常被用来估算电脑的执行效能,尤其是在使用到大量浮点运算的科学计算领域中。正因为FLOPS字尾的那个S,代表秒,而不是复数,所以不能省略掉。

在这里所谓的”浮点运算”,实际上包括了所有涉及小数的运算。这类运算在某类应用软件中常常出现,而它们也比整数运算更花时间。现今大部分的处理器中,都有一个专门用来处理浮点运算的”浮点运算器”(FPU)。也因此FLOPS所量测的,实际上就是FPU的执行速度。

GFLOPS 就是 Giga Floating-point Operations Per Second,即每秒10亿次的浮点运算数,常作为GPU性能参数但不一定代表GPU的实际表现,因为还要考虑具体如何拆分多边形和像素、以及纹理填充,理论上该数值越高越好。1GFlops = 1,000MFlops。

我们在构建完模型后,如何得到以上这些参数量。这里常用的工具有:

针对tensorflow

针对torch

有第三方工具torchstat和thop

from torchstat import stat
import torchvision.models as models

model = model.densenet121()
stat(model, (3, 224, 224))
from torchvision.models import densenet121
from thop import profile
model = densenet121()
input = torch.randn(1, 3, 224, 224)
macs, params = profile(model, inputs=(input, ))

Original: https://blog.csdn.net/BIT_Legend/article/details/123805898
Author: BIT_Legend
Title: 深度学习模型计算量评价指标FLOPs, MACs, MAdds关系

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/8955/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

发表回复

登录后才能评论
免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部