这篇教程pytorch 计算Parameter和FLOP的操作写得很实用,希望能帮到您。 深度学习中,模型训练完后,查看模型的参数量和浮点计算量,在此记录下: 1 THOP在pytorch中有现成的包thop用于计算参数数量和FLOP,首先安装thop: 注意安装thop时可能出现如下错误: 
解决方法:pip install --upgrade git+https://github.com/Lyken17/pytorch-OpCounter.git # 下载源码安装 使用方法如下: from torchvision.models import resnet50 # 引入ResNet50模型from thop import profilemodel = 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)第二步:计算import torchfrom thop import profilenet = 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,)中必须加上逗号,否者会报错 以上为个人经验,希望能给大家一个参考,也希望大家多多支持51zixue.net。如有错误或未考虑完全的地方,望不吝赐教。 从Pytorch模型pth文件中读取参数成numpy矩阵的操作 pytorch 把图片数据转化成tensor的操作 |