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 相关文章推荐
wxPython事件驱动实例详解
Sep 28 Python
浅谈Python中copy()方法的使用
May 21 Python
Python面向对象程序设计之继承与多继承用法分析
Jul 13 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
Apr 29 Python
Python实现制度转换(货币,温度,长度)
Jul 14 Python
Python 仅获取响应头, 不获取实体的实例
Aug 21 Python
python 申请内存空间,用于创建多维数组的实例
Dec 02 Python
Python读取实时数据流示例
Dec 02 Python
pycharm中import呈现灰色原因的解决方法
Mar 04 Python
python向企业微信发送文字和图片消息的示例
Sep 28 Python
Python创建简单的神经网络实例讲解
Jan 04 Python
python中的class_static的@classmethod的巧妙用法
Jun 22 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在Web开发领域的优势
2006/10/09 PHP
PHP 定界符 使用技巧
2009/06/14 PHP
应用开发中涉及到的css和php笔记分享
2011/08/02 PHP
教你在header中隐藏php的版本信息
2016/08/10 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
2014/06/20 Javascript
Bootstrap基本插件学习笔记之折叠(22)
2016/12/08 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
2016/12/08 Javascript
走进javascript——不起眼的基础,值和分号
2017/02/24 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
vue组件是如何解析及渲染的?
2021/01/13 Vue.js
[02:48]DOTA2英雄基础教程 暗夜魔王
2013/12/12 DOTA
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
自己使用总结Python程序代码片段
2015/06/02 Python
python3爬取各类天气信息
2018/02/24 Python
python调用百度语音识别api
2018/08/30 Python
在Django中URL正则表达式匹配的方法
2018/12/20 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
关于Tensorflow使用CPU报错的解决方式
2020/02/05 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
2020/03/23 Python
python 判断一组数据是否符合正态分布
2020/09/23 Python
Nili Lotan官网:Nili Lotan同名品牌
2018/01/07 全球购物
HomeAway英国:全球领先的度假租赁在线市场
2020/02/03 全球购物
LVMH旗下最大的奢侈品网站平台:24S
2020/05/24 全球购物
技术人员面试提纲
2013/11/28 职场文书
门卫班长岗位职责
2013/12/15 职场文书
物业招聘计划书
2014/01/10 职场文书
单位未婚证明范本
2014/01/18 职场文书
质量保证书范本
2014/04/29 职场文书
行政人事专员岗位职责
2015/04/07 职场文书
高一数学教学反思
2016/02/18 职场文书
实习报告怎么写
2019/06/20 职场文书
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis