Project Icon

flops-counter.pytorch

神经网络运算量与参数计算工具

该工具用于计算神经网络中的理论乘法加法运算量,以及参数数量和逐层计算成本。工具支持两个后端:pytorch和aten。aten后端覆盖更多模型架构,而pytorch后端更适合CNN分析。通过设置verbose参数,可以获取未纳入复杂度计算的操作信息,通过ignore_modules选项则可以忽略特定模块,适用于研究用途。适用于Pytorch版本2.0及以上。

项目介绍

flops-counter.pytorch 是一个用于计算神经网络在 Pytorch 框架中的理论乘加运算量的工具。这款工具可以帮助用户计算网络的参数数量,并打印每一层的计算成本细节。对于神经网络模型的优化和评估,该工具提供了重要的参考指标。

功能与特点

后端支持

ptflops 提供了两个后端:pytorchaten。两个后端之间的区别主要在于支持的模型架构和输出的详细程度。

  • pytorch 后端:这是一个遗留后端,主要支持 nn.Modules,在卷积神经网络(CNN)分析上表现较佳。然而,对于类似 transformer 等非 CNN 架构,建议使用 aten 后端。
  • aten 后端:这是默认后端,考虑到了更多操作类型,覆盖了更多的模型架构,包括 transformer。

aten 后端功能

aten 后端中,重点考虑了以下操作:

  • 矩阵乘法及相关变体(如 aten.mm, aten.matmul, aten.addmm, aten.bmm
  • 卷积操作(如 aten.convolution

使用建议:

  • 若使用 verbose=True,工具可以显示在复杂度计算过程中被忽略的操作。
  • aten 后端仅打印直接嵌套在根 nn.Module 中的模块的统计信息,第二层嵌套模块不会显示在输入层统计中。
  • 使用 ignore_modules 参数,可以让 ptflops 忽略指定的模块,便于进行特定的研究需求。例如,要在计算中忽略所有卷积,可以指定 ignore_modules=[torch.ops.aten.convolution, torch.ops.aten._convolution]

pytorch 后端功能

这个后端支持多种层类型,包括但不限于:

  • 卷积层 (Conv1d/2d/3d)
  • 批归一化,分组归一化,实例归一化,层归一化等操作
  • 激活函数 (如 ReLU, ELU, GELU)
  • 线性层及池化层

使用建议:

  • 部分 torch.nn.functional.*tensor.* 操作不在支持列表中,因此它们不会对最终复杂度估算有贡献。
  • 在复杂模型中,可以使用 input_constructor 参数来构建非平凡输入,通过传入函数来处理输入的空间分辨率。
  • verbose 参数可以提供关于不影响最终数据的模块的信息。
  • 使用 ignore_modules 参数可以忽略特定模块,以适应研究需求。

使用方式

用户可以通过 PyPI 和项目存储库安装 ptflops。对于 PyTorch 2.0 及以上版本,可以使用以下命令进行安装:

pip install ptflops

示例

以下是一个简单的使用示例:

import torchvision.models as models
import torch
from ptflops import get_model_complexity_info

with torch.cuda.device(0):
  net = models.densenet161()
  macs, params = get_model_complexity_info(net, (3, 224, 224), as_strings=True, backend='pytorch',
                                           print_per_layer_stat=True, verbose=True)
  print('{:<30}  {:<8}'.format('Computational complexity: ', macs))
  print('{:<30}  {:<8}'.format('Number of parameters: ', params))

通过这个示例,用户可以看到每层计算的复杂度以及参数数量,为进一步的模型优化提供数据参考。

评价与引用

如果 ptflops 在您的论文或技术报告中发挥了作用,请引用以下信息:

@online{ptflops,
  author = {Vladislav Sovrasov},
  title = {ptflops: a flops counting tool for neural networks in pytorch framework},
  year = 2018-2024,
}

该工具得到了社区的支持与贡献,感谢 @warmspringwinds 和 Horace He 提供的最初版本脚本。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号