深度学习——神经网络模型运算量和参数量分析

本文介绍了神经网络中的FLOPS、FLOPs和MACs概念,并比较了Python中thop、torchsummary和ptflops等工具在计算模型运算量和参数量上的应用,强调了多输入模型分析时的注意事项。
摘要由CSDN通过智能技术生成

1、FLOPS、FLOPs和MACs区分

  1. FLOPS(Floating Point Operations Per Second):每秒浮点运算次数,是一个衡量硬件(显卡、CPU)速度的指标。
  2. FLOPs(Floating Point Operations):浮点运算次数,用来衡量模型计算复杂度。一次乘法算一个FLOPs,一次加法也算一个FLOPs
  3. MACs(Multiply-Accumulate Operations):乘加累积操作数,1MACs包含一个乘法操作与一个加法操作,大约包含2FLOPs,通常MACs与FLOPs存在一个2倍的关系。

2、Python中一些计算模型运算量和网络参数量的工具

2.1、thop

注意:输入需要带上Batch维度, 支持多输入,最直观,在中间变量较多if else时可能会报错。

from thop import profile, clever_format
total_ops, total_params = profile(my_model, inputs=(torch.randn((1,3,192,400)),torch.randn((1,1,192,400)),), verbose=False)
# 这里我使用了一个两输入的模型
clever_format([total_ops, total_params], "%.3f")

返回值:
total_ops:5.621G——实际上是上面提到的MACs
total_params:8.920M——参数的个数,而不是占用的大小,如果模型都是float32参数,每个参数占用4字节。

2.2、torchsummary.summary

注意:model必须是pytorch模型,必须继承自nn.Module;模型输入size,形状为C,H,W;支持多输入的模型;但是在中间变量较多if else时可能会报错。

from torchsummary import summary
a = summary(my_model,[(3, 192, 400), (1, 192, 400)], device='cuda')

返回值:
Total params: 8,878,994——Total params是指模型中总参数个数,包括权重偏置等,而不考虑参数的具体数据类型和内存占用情况,只是简单地计算模型中所有参数的数量。
Trainable params: 8,878,994——模型中可训练的参数个数。
Params size (MB): 33.87 模型大小:这个是模型保存的大小,目前模型多用floa32,一个数占用4字节,这个参数是指保存到电脑中的模型.pth文件的大小。

2.3、ptflops

注意:仅支持单输入模型,不支持任何激活函数,激活函数需要设置成nn.Identity,或者考虑用F.relu等,但是能看到每一层的参数以及计算量分布。常用于调整层结构

from ptflops import get_model_complexity_info
flops, params = get_model_complexity_info(RCFormer_net, (4,192,400), as_strings=True, print_per_layer_stat=True)
print(flops)
print(params)

所有的方法都更推荐优先将模型转为单输入然后再分析,多输入模型分析容易出问题。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值