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 strip lstrip rstrip使用方法
Sep 06 Python
python实现倒计时的示例
Feb 14 Python
python列表的常用操作方法小结
May 21 Python
python 数据清洗之数据合并、转换、过滤、排序
Feb 12 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
Mar 24 Python
Python网络爬虫神器PyQuery的基本使用教程
Feb 03 Python
Opencv+Python 色彩通道拆分及合并的示例
Dec 08 Python
python IDLE 背景以及字体大小的修改方法
Jul 12 Python
django 捕获异常和日志系统过程详解
Jul 18 Python
Python socket非阻塞模块应用示例
Sep 12 Python
Python3的unicode编码转换成中文的问题及解决方案
Dec 10 Python
Python函数参数定义及传递方式解析
Jun 10 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
javascript 小型动画组件与实现代码
2010/06/02 PHP
php猜单词游戏
2015/09/29 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
php实现在线通讯录功能(附源码)
2016/05/13 PHP
才发现的超链接js导致网页中GIF动画停止的解决方法
2007/11/02 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
用jquery存取照片的具体实现方法
2013/06/30 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
js实现在网页上简单显示时间的方法
2015/03/02 Javascript
Jquery实现顶部弹出框特效
2015/08/08 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
2016/06/16 Javascript
AngularJS入门教程引导程序
2016/08/18 Javascript
微信小程序 网络API 上传、下载详解
2016/11/09 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
2017/08/16 Javascript
js使用ajax传值给后台,后台返回字符串处理方法
2018/08/08 Javascript
Node批量爬取头条视频并保存方法
2018/09/20 Javascript
vue组件中的样式属性scoped实例详解
2018/10/30 Javascript
js如何验证密码强度
2020/03/18 Javascript
将Vue组件库更换为按需加载的方法步骤
2020/05/06 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
2020/05/30 jQuery
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
使用Python中的线程进行网络编程的入门教程
2015/04/15 Python
Python基于select实现的socket服务器
2016/04/13 Python
Python将图片转换为字符画的方法
2020/06/16 Python
Python面向对象之类的定义与继承用法示例
2019/01/14 Python
Python基础教程之if判断,while循环,循环嵌套
2019/04/25 Python
利用CSS3的flexbox实现水平垂直居中与三列等高布局
2016/09/12 HTML / CSS
css3和jquery实现自定义checkbox和radiobox组件
2014/04/22 HTML / CSS
检查机关领导群众路线教育实践活动个人整改措施
2014/10/28 职场文书
见习报告的格式
2014/11/04 职场文书
面试感谢信范文
2015/01/22 职场文书
简历自我评价优缺点
2015/03/11 职场文书
创业计划书之餐饮馄饨店
2019/07/18 职场文书
深入探讨opencv图像矫正算法实战
2021/05/21 Python
centos8安装MongoDB的详细过程
2021/10/24 MongoDB
win10以太网连接不上怎么办?Win10连接以太网详细教程
2022/04/08 数码科技