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 相关文章推荐
详解Django中Request对象的相关用法
Jul 17 Python
Python使用logging模块实现打印log到指定文件的方法
Sep 05 Python
python绘制散点图并标记序号的方法
Dec 11 Python
django创建最简单HTML页面跳转方法
Aug 16 Python
python使用 request 发送表单数据操作示例
Sep 25 Python
python3实现网页版raspberry pi(树莓派)小车控制
Feb 12 Python
python图形开发GUI库wxpython使用方法详解
Feb 14 Python
python数据预处理方式 :数据降维
Feb 24 Python
Python3.6 中的pyinstaller安装和使用教程
Mar 16 Python
PyQt5+python3+pycharm开发环境配置教程
Mar 24 Python
Pycharm中使用git进行合作开发的教程详解
Nov 17 Python
python爬虫调度器用法及实例代码
Nov 30 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
图文详解phpstorm配置Xdebug进行调试PHP教程
2016/06/13 PHP
PHP简单检测网址是否能够正常打开的方法
2016/09/04 PHP
Laravel实现表单提交
2017/05/07 PHP
php源码的安装方法和实例
2019/09/26 PHP
JS URL传中文参数引发的乱码问题
2009/09/02 Javascript
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
JQuery获取各种宽度、高度(format函数)实例
2013/03/04 Javascript
Webpack 实现 Node.js 代码热替换
2015/10/22 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
Bootstrap入门书籍之(一)排版
2016/02/17 Javascript
详解Angular CLI + Electron 开发环境搭建
2017/07/20 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
2018/03/09 Javascript
Express的HTTP重定向到HTTPS的方法
2018/06/06 Javascript
vue-cli2打包前和打包后的css前缀不一致的问题解决
2018/08/24 Javascript
深入koa-bodyparser原理解析
2019/01/16 Javascript
JS异步处理的进化史深入讲解
2019/08/25 Javascript
Python数据库的连接实现方法与注意事项
2016/02/27 Python
python实现机械分词之逆向最大匹配算法代码示例
2017/12/13 Python
python模块之subprocess模块级方法的使用
2019/03/26 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
2020/10/23 Python
pymysql模块使用简介与示例
2020/11/17 Python
python 实现图片修复(可用于去水印)
2020/11/19 Python
python将YUV420P文件转PNG图片格式的两种方法
2021/01/22 Python
买卖正宗运动鞋:GOAT
2019/12/06 全球购物
诚信考试承诺书
2014/03/27 职场文书
扬尘污染防治方案
2014/06/15 职场文书
意外伤害赔偿协议书
2014/09/16 职场文书
2017公司年会主持人开幕词
2016/03/04 职场文书
幼儿园六一儿童节开幕词
2016/03/04 职场文书
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python
Python之基础函数案例详解
2021/08/30 Python
python机器学习实现oneR算法(以鸢尾data为例)
2022/03/03 Python
MySQL Server层四个日志的实现
2022/03/31 MySQL