[神经网络]计算量GFLOPS和参数量#Params以及感受野计算

本文详细解析了FLOPS(每秒浮点运算次数)与FLOPs(浮点运算数)的概念,解释了它们在衡量硬件性能与算法复杂度上的应用。并给出了卷积核及全连接层网络的FLOPs计算公式。

FLOPS:floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。衡量硬件性能的指标。
FLOPs:floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。衡量算法/模型的复杂度。

假设采用滑动窗实现卷积且忽略非线性计算开销,则卷积核的FLOPs为,其中HWC_{in}分别为输入特征图(就是输入图片了)的高度、宽度和通道数,K为核宽度,C_{out}为输出通道数。

\textup{FLOPs}=2HW(C_{in}K^{2}+1)C_{out}

 

全连接层网络FLOPs为,其中,I为输入维数,O为输出维数。

\textup{FLOPs}=(2I-1)O

 

Ref: Molchanov P, Tyree S, Karras T, et al. Pruning Convolutional Neural Networks for Resource Efficient Inference[J]. 2016.

https://blog.youkuaiyun.com/zhaoyin214/article/details/83616164

 

https://blog.youkuaiyun.com/wangdongwei0/article/details/88389775

https://zhuanlan.zhihu.com/p/33992733

https://zhuanlan.zhihu.com/p/34475420

https://zhuanlan.zhihu.com/p/29024978

https://blog.youkuaiyun.com/peaceinmind/article/details/78079263

https://blog.youkuaiyun.com/warm_in_spring/article/details/79133459

https://blog.youkuaiyun.com/hzhj2007/article/details/80164909

https://blog.youkuaiyun.com/hzhj2007/article/details/80164909

https://blog.youkuaiyun.com/qian99/article/details/79008053

 

https://blog.youkuaiyun.com/wgx571859177/article/details/80983043

https://fomoro.com/projects/project/receptive-field-calculator

<think>好的,我现在需要帮助用户解决如何在PyTorch中计算ResNet模型的FLOPS参数量的问题。根据用户提供的引用内容,他们提到了两种方法:使用ptflops库thop库,还有torchsummaryX。首先,我要确认这些方法的正确性步骤。 首先,用户提到的第一个引用是关于ptflops的使用。他们导入了必要的库,加载模型,然后调用get_model_complexity_info函数。输入的尺寸是(3,320,320),输出FLOPS参数量。需要注意输入是元组类型,不需要batch大小。这个步骤看起来可行,但用户可能需要根据自己模型的输入尺寸调整参数,比如ResNet通常使用224x224的输入,所以可能需要修改为(3,224,224)。 第二个引用提到了thop库的profile方法torchsummaryX的summary方法。使用thop的profile时,需要创建一个输入张量,然后调用profile函数。而torchsummaryX的summary方法则会输出每层的详细信息。用户注意到两种方法的结果可能有差异,这可能是因为计算方式不同,比如是否考虑某些层的操作。 接下来,我需要整理这两个方法的步骤,确保用户能清楚如何操作。首先,安装相应的库,比如ptflops、thop、torchsummaryX。然后,分别写出两种方法的示例代码,并指出注意事项,比如输入尺寸、是否需要预训练模型等。 用户的问题是关于ResNet的,所以需要确保示例中使用的是ResNet模型。例如,在ptflops的例子中,用户可能加载自己的ResNet模型,或者使用预训练的。需要提醒用户注意模型是否正确加载,以及输入尺寸是否匹配。 另外,用户可能对输出结果中的单位有疑问,比如FLOPS是GFLOPs参数量的单位是百万(M)。需要明确说明这些单位,避免混淆。 还需要提到可能遇到的常见问题,比如输入尺寸错误、库的版本问题,或者模型结构不同导致的差异。例如,某些自定义的ResNet变体可能有不同的层结构,影响计算结果。 最后,应该比较两种方法的优缺点,帮助用户选择合适的方法。比如ptflops可能更简单直接,而thoptorchsummaryX提供更详细的每层信息。 总结步骤:安装库、加载模型、输入尺寸设置、调用函数、处理输出结果。同时注意可能的陷阱,如输入格式、模型状态(eval模式可能影响某些计算)等。 现在需要将这些思考整理成结构化的回答,分点说明两种方法,并给出示例代码,最后总结注意事项。确保语言清晰,步骤明确,用户能顺利跟随操作。</think>在PyTorch中计算ResNet模型的FLOPS(浮点运算次数)参数量(Params)可通过以下两种主流方法实现: --- ### 方法一:使用`ptflops`库 #### 步骤说明 1. **安装库**:`pip install ptflops` 2. **加载模型**:支持自定义模型或官方预训练模型 3. **输入尺寸设置**:需匹配模型输入要求(ResNet通常为$3 \times 224 \times 224$) 4. **调用函数计算**:`get_model_complexity_info` ```python from ptflops import get_model_complexity_info from torchvision.models import resnet50 model = resnet50(pretrained=False) # 或加载自定义模型 flops, params = get_model_complexity_info( model, (3, 224, 224), # 输入尺寸 as_strings=True, # 返回易读单位 print_per_layer_stat=False # 是否打印每层信息 ) print(f"FLOPS: {flops}, Params: {params}") ``` #### 输出示例 ``` ResNet50 |4.11 GMac |25.56 M ``` --- ### 方法二:使用`thop`库 #### 步骤说明 1. **安装库**:`pip install thop` 2. **创建输入张量**:需指定与模型匹配的输入尺寸 3. **调用`profile`函数**:自动追踪计算图 ```python import torch from thop import profile from torchvision.models import resnet50 model = resnet50(pretrained=False) input = torch.randn(1, 3, 224, 224) # 输入张量 flops, params = profile(model, inputs=(input,)) print(f"FLOPS: {flops/1e9} G, Params: {params/1e6} M") ``` #### 输出示例 ``` Params: 25.56M, Gflops: 4.11 ``` --- ### 关键差异说明 | 方法 | 优点 | 注意事项 | |------------|---------------------------|------------------------------| | `ptflops` | 直接输出易读单位 | 需手动设置输入尺寸元组 | | `thop` | 自动追踪动态计算图 | 结果单位为原始数值需手动转换 | --- ### 注意事项 1. **输入尺寸匹配**:ResNet标准输入为$3 \times 224 \times 224$,若修改需同步调整[^1] 2. **模型状态**:计算前需调用`model.eval()`避免BN层影响 3. **结果差异**:不同工具对卷积/池化等操作的计算方式可能不同[^2] 4. **自定义模型**:若使用非标准ResNet,需确保所有层被正确识别 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值