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的Flask框架中使用日期和时间的教程
Apr 21 Python
Python利用pandas计算多个CSV文件数据值的实例
Apr 19 Python
利用python如何处理nc数据详解
May 23 Python
在Python中获取两数相除的商和余数方法
Nov 10 Python
Django之PopUp的具体实现方法
Aug 31 Python
Python使用pdb调试代码的技巧
May 03 Python
Python延迟绑定问题原理及解决方案
Aug 04 Python
Python 读取位于包中的数据文件
Aug 07 Python
python Selenium 库的使用技巧
Oct 16 Python
Django实现WebSocket在线聊天室功能(channels库)
Sep 25 Python
Python中Numpy和Matplotlib的基本使用指南
Nov 02 Python
python 多态 协议 鸭子类型详解
Nov 27 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
四月新番又没了,《Re:从零开始的异世界生活》第二季延期至7月播出
2020/05/06 日漫
php 遍历数据表数据并列表横向排列的代码
2009/09/05 PHP
PHP自带函数给数字或字符串自动补齐位数
2014/07/29 PHP
PHP中的随机性 你觉得自己幸运吗?
2016/01/22 PHP
php基于mcrypt_encrypt和mcrypt_decrypt实现字符串加密解密的方法
2016/07/12 PHP
php实现压缩合并js的方法【附demo源码下载】
2016/09/22 PHP
jQuery UI的Dialog无法提交问题的解决方法
2011/01/11 Javascript
js jq 单击和双击区分示例介绍
2013/11/05 Javascript
IE与FF下javascript获取网页及窗口大小的区别详解
2014/01/14 Javascript
JS实现闪动的title消息提醒效果
2014/06/20 Javascript
什么是MEAN?JavaScript编程中的MEAN是什么意思?
2014/12/18 Javascript
jquery滚动加载数据的方法
2015/03/09 Javascript
浅谈javascript属性onresize
2015/04/20 Javascript
jquery选择器简述
2015/08/31 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
2015/10/16 Javascript
php利用curl获取远程图片实现方法
2015/10/26 Javascript
Jquery Ajax Error 调试错误的技巧
2015/11/20 Javascript
Bootstrap开发实战之第一次接触Bootstrap
2016/06/02 Javascript
微信小程序对接七牛云存储的方法
2017/07/30 Javascript
ECMAScript6变量的解构赋值实例详解
2017/09/19 Javascript
iview实现select tree树形下拉框的示例代码
2018/12/21 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
Node.js实现简单的爬取的示例代码
2019/06/25 Javascript
[04:26]2014DOTA2西雅图国际邀请赛 总决赛TOPPLAY
2014/07/22 DOTA
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
Python3实现购物车功能
2018/04/18 Python
python 不同方式读取文件速度不同的实例
2018/11/09 Python
python对文件的操作方法汇总
2020/02/28 Python
Python基于jieba, wordcloud库生成中文词云
2020/05/13 Python
基于Python测试程序是否有错误
2020/05/16 Python
倩碧美国官网:Clinique美国
2016/07/20 全球购物
优秀安全员事迹材料
2014/05/11 职场文书
学校安全教育月活动总结
2014/07/07 职场文书
经济纠纷起诉状
2015/05/20 职场文书
2016年优秀少先队员事迹材料
2016/02/26 职场文书
阿里云服务器搭建Php+Apache运行环境的详细过程
2021/05/15 PHP