pytorch 计算Parameter和FLOP的操作


Posted in Python onMarch 04, 2021

深度学习中,模型训练完后,查看模型的参数量和浮点计算量,在此记录下:

1 THOP

在pytorch中有现成的包thop用于计算参数数量和FLOP,首先安装thop:

pip install thop

注意安装thop时可能出现如下错误:

pytorch 计算Parameter和FLOP的操作

解决方法:

pip install --upgrade git+https://github.com/Lyken17/pytorch-OpCounter.git # 下载源码安装

使用方法如下:

from torchvision.models import resnet50 # 引入ResNet50模型
from thop import profile
model = resnet50()
flops, params = profile(model, input_size=(1, 3, 224,224)) # profile(模型,输入数据)

对于自己构建的函数也一样,例如shuffleNetV2

from thop import profile
  from utils.ShuffleNetV2 import shufflenetv2 # 导入shufflenet2 模块
  import torch 
  
  model_shuffle = shufflenetv2(width_mult=0.5)
  model = torch.nn.DataParallel(model_shuffle)  # 调用shufflenet2 模型,该模型为自己定义的
  flop, para = profile(model, input_size=(1, 3, 224, 224),) 
  print("%.2fM" % (flop/1e6), "%.2fM" % (para/1e6))

更多细节,可参考thop GitHub链接: https://github.com/Lyken17/pytorch-OpCounter

2 计算参数

pytorch本身带有计算参数的方法

from thop import profile
  from utils.ShuffleNetV2 import shufflenetv2 # 导入shufflenet2 模块
  import torch 
  
  model_shuffle = shufflenetv2(width_mult=0.5)
  model = torch.nn.DataParallel(model_shuffle)
  total = sum([param.nelement() for param in model.parameters()])
  print("Number of parameter: %.2fM" % (total / 1e6))

补充:pytorch: 计算网络模型的计算量(FLOPs)和参数量(Params)

计算量:

FLOPs,FLOP时指浮点运算次数,s是指秒,即每秒浮点运算次数的意思,考量一个网络模型的计算量的标准。

参数量:

Params,是指网络模型中需要训练的参数总数。

第一步:安装模块(thop)

pip install thop

第二步:计算

import torch
from thop import profile
net = Model() # 定义好的网络模型
input = torch.randn(1, 3, 112, 112)
flops, params = profile(net, (inputs,))
print('flops: ', flops, 'params: ', params)

注意:

输入input的第一维度是批量(batch size),批量的大小不回影响参数量, 计算量是batch_size=1的倍数

profile(net, (inputs,))的 (inputs,)中必须加上逗号,否者会报错

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Python 相关文章推荐
python实现根据主机名字获得所有ip地址的方法
Jun 28 Python
Python实现TCP/IP协议下的端口转发及重定向示例
Jun 14 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
Jul 10 Python
简述Python2与Python3的不同点
Jan 21 Python
Python迭代器与生成器基本用法分析
Jul 26 Python
Python正则表达式指南 推荐
Oct 09 Python
python 美化输出信息的实例
Oct 15 Python
python三方库之requests的快速上手
Mar 04 Python
Python简单基础小程序的实例代码
Apr 28 Python
Python语法分析之字符串格式化
Jun 13 Python
Python 实现打印单词的菱形字符图案
Apr 12 Python
python利用proxybroker构建爬虫免费IP代理池的实现
Feb 21 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
Mar 04 #Python
python 如何用urllib与服务端交互(发送和接收数据)
Mar 04 #Python
python 求两个向量的顺时针夹角操作
Mar 04 #Python
python 制作磁力搜索工具
Mar 04 #Python
python抢购软件/插件/脚本附完整源码
Mar 04 #Python
Python 求向量的余弦值操作
Mar 04 #Python
django使用多个数据库的方法实例
Mar 04 #Python
You might like
二招解决php乱码问题
2012/03/25 PHP
php简单复制文件的方法
2016/05/09 PHP
JS启动应用程序的一个简单例子
2008/05/11 Javascript
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
javascript getElementsByTagName
2011/01/31 Javascript
最好用的省市二级联动 原生js实现你值得拥有
2013/09/22 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
2014/02/21 Javascript
node.js中的fs.chmodSync方法使用说明
2014/12/18 Javascript
修复bash漏洞的shell脚本分享
2014/12/31 Javascript
jquery实现的仿天猫侧导航tab切换效果
2015/08/24 Javascript
Jquery promise实现一张一张加载图片
2015/11/13 Javascript
vue刷新和tab切换实例
2018/02/11 Javascript
VSCode中如何利用d.ts文件进行js智能提示
2018/04/13 Javascript
JS实现根据指定值删除数组中的元素操作示例
2018/08/02 Javascript
Vue2.0点击切换类名改变样式的方法
2018/08/22 Javascript
详解从react转职到vue开发的项目准备
2019/01/14 Javascript
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
2019/12/23 Javascript
Python基于select实现的socket服务器
2016/04/13 Python
Python学习入门之区块链详解
2017/07/25 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
2020/01/04 Python
CSS3教程(3):border-color网页边框色彩
2009/04/02 HTML / CSS
阿迪达斯俄罗斯官方商城:adidas俄罗斯
2017/03/08 全球购物
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
LODI女鞋在线商店:阿利坎特的鞋类品牌
2019/02/15 全球购物
Boom手表官网:瑞典手表品牌,设计你的手表
2019/03/11 全球购物
小米俄罗斯授权商店:Xiaomi俄罗斯
2019/12/08 全球购物
介绍一下write命令
2012/09/24 面试题
大学班级干部的自我评价分享
2014/02/10 职场文书
北京离婚协议书范文2014
2014/09/29 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
员工辞职信怎么写
2015/02/27 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
回复函格式及范文
2015/07/14 职场文书
Ajax常用封装库——Axios的使用
2021/05/08 Javascript
2021年国产动漫公司排行前十名,玄机科技上榜,第二推出过铠甲勇士
2022/03/18 杂记