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脚本实现下载合并SAE日志
Feb 10 Python
Python线程详解
Jun 24 Python
浅谈python中的面向对象和类的基本语法
Jun 13 Python
TensorFlow在MAC环境下的安装及环境搭建
Nov 14 Python
单利模式及python实现方式详解
Mar 20 Python
十分钟利用Python制作属于你自己的个性logo
May 07 Python
PyCharm在新窗口打开项目的方法
Jan 17 Python
python添加模块搜索路径和包的导入方法
Jan 19 Python
Python实现获取当前目录下文件名代码详解
Mar 10 Python
python用tkinter实现一个简易能进行随机点名的界面
Sep 27 Python
浅析Python实现DFA算法
Jun 26 Python
Python如何使用循环结构和分支结构
Apr 13 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 中文字符串首字母的获取函数分享
2013/11/04 PHP
php处理复杂xml数据示例
2016/07/11 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
2019/10/30 PHP
Javascript 错误处理的几种方法
2009/06/13 Javascript
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
jquery ajax例子返回值详解
2012/09/11 Javascript
JavaScript执行顺序详细介绍
2013/12/04 Javascript
node.js中的console.timeEnd方法使用说明
2014/12/09 Javascript
JavaScript中遍历对象的property的3种方法介绍
2014/12/30 Javascript
js实现简单div拖拽功能实例
2015/05/12 Javascript
jQuery实现表单步骤流程导航代码分享
2015/08/28 Javascript
微信小程序 navigation API实例详解
2016/10/02 Javascript
webpack配置文件和常用配置项介绍
2017/04/28 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
浅谈vue项目用到的mock数据接口的两种方式
2019/10/09 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
2020/06/08 Javascript
vue通过过滤器实现数据格式化
2020/07/20 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
[56:48]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python实现的简单窗口倒计时界面实例
2015/05/05 Python
python GUI实例学习
2017/11/21 Python
详解python 中in 的 用法
2019/12/12 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
2020/01/18 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
filter使用python3代码进行迭代元素的实例详解
2020/12/03 Python
世界领先的艺术图书出版社:TASCHEN
2018/07/23 全球购物
澳大利亚领先的内衣店:Bendon Lingerie澳大利亚
2020/05/15 全球购物
个人生活学习自我评价范文
2013/11/26 职场文书
国际经济与贸易专业求职信
2014/07/10 职场文书
硕士学位论文评语
2014/12/31 职场文书
社区服务活动报告
2015/02/05 职场文书
环保主题班会教案
2015/08/13 职场文书
Python 制作自动化翻译工具
2021/04/25 Python
vue如何清除浏览器历史栈
2022/05/25 Vue.js