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中使用Tkinter模块创建GUI程序实例
Jan 14 Python
python获取指定时间差的时间实例详解
Apr 11 Python
Python爬虫天气预报实例详解(小白入门)
Jan 24 Python
python 使用re.search()筛选后 选取部分结果的方法
Nov 28 Python
python实现批量修改服务器密码的方法
Aug 13 Python
tensorflow2.0保存和恢复模型3种方法
Feb 03 Python
基于Django signals 信号作用及用法详解
Mar 28 Python
解决更改AUTH_USER_MODEL后出现的问题
May 14 Python
python代码中怎么换行
Jun 17 Python
python 实现两个npy档案合并
Jul 01 Python
python爬虫中采集中遇到的问题整理
Nov 27 Python
Django与AJAX实现网页动态数据显示的示例代码
Feb 24 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
咖啡店都有些什么常规豆子呢?有什么风味在里面
2021/03/04 咖啡文化
php5.4以下版本json不支持不转义内容中文的解决方法
2015/01/13 PHP
PHP实现的贪婪算法实例
2017/10/17 PHP
PHP http请求超时问题解决方案
2020/11/13 PHP
JS Array对象入门分析
2008/10/30 Javascript
jquery animate 动画效果使用说明
2009/11/04 Javascript
JavaScript 存在陷阱 删除某一区域所有节点
2010/05/10 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件
2010/08/24 Javascript
用方法封装javascript的new操作符(一)
2010/12/25 Javascript
基于JQuery的日期联动实现代码
2011/02/24 Javascript
js加入收藏以及使用Jquery更改透明度
2014/01/26 Javascript
jquery单选框radio绑定click事件实现方法
2015/01/14 Javascript
JavaScript获取元素尺寸和大小操作总结
2015/02/27 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
jquery html5 视频播放控制代码
2016/11/06 Javascript
jQuery实现图片滑动效果
2017/03/08 Javascript
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
2018/01/26 Javascript
Vuejs 单文件组件实例详解
2018/02/09 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
2018/02/28 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
2019/04/28 Javascript
13 个npm 快速开发技巧(推荐)
2019/07/04 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
2020/02/01 Javascript
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
简单几步用纯CSS3实现3D翻转效果
2019/01/17 HTML / CSS
英国知名美妆护肤在线商城:Zest Beauty
2018/04/24 全球购物
PHP如何设置和取得Cookie值
2015/06/30 面试题
青年教师培训方案
2014/02/06 职场文书
《长城和运河》教学反思
2014/04/14 职场文书
班委竞选演讲稿
2014/04/28 职场文书
摄影展策划方案
2014/06/02 职场文书
暑期社会实践个人总结
2015/03/06 职场文书
三严三实学习心得体会(精选N篇)
2016/01/05 职场文书
Python编写nmap扫描工具
2021/07/21 Python
postgresql之greenplum字符串去重拼接方式
2023/05/08 PostgreSQL