torchsummary和torchstat使用方法和结果分析

本文介绍了如何使用torchstat和torchsummary工具来分析PyTorch模型的参数量、运算量以及结构。torchstat提供网络的参数、内存、FLOPs和MAdd等信息,而torchsummary则用于查看模型的详细结构、输入输出尺寸以及参数数量。通过这两个工具,开发者可以更好地理解和调试模型,优化其性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 torchstat:查看模型的大小和浮动运算量

安装工具 pip install torchstat

使用例子

import torch
import torch.nn as nn
from torchstat import stat

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()

        self.layer1 = nn.Sequential(
            nn.Conv2d(3, 32, kernel_size=3),
            nn.BatchNorm2d(32),
            nn.ReLU(),
            nn.MaxPool2d(2, 2)
        )

        self.fc = nn.Sequential(
            nn.Linear(32 * 127 * 127, 1024),
            nn.ReLU(),
            nn.Linear(1024, 4)
        )

    def forward(self, x):
        x = self.layer1(x)
        x = x.view(-1, 32 * 127 * 127)
        x = self.fc(x)

        return x
model=Net()
print(stat(model, (3, 256, 256)))

输出结果如下所示:
在这里插入图片描述
参数说明:

【params】
网络的参数量

【memory】
节点推理时候所需的内存

【Flops】
网络完成的浮点运算

【MAdd】
网络完成的乘加操作的数量。一次乘加=一次乘法+一次加法,所以可以粗略的认为
Flops ≈2*MAdd

【MemRead】
网络运行时,从内存中读取的大小

【MemWrite】
网络运行时,写入到内存中的大小

【MemR+W】
MemR+W = MemRead + MemWrite

2 torchsummary:查看模型结构和输入输出尺寸

torchsummary.summary(model, input_size, batch_size=-1, device="cuda")

功能:查看模型的信息,便于调试

  • model:pytorch 模型,必须继承自 nn.Module
  • input_size:模型输入 size,形状为 C,H ,W
  • batch_size:batch_size,默认为 -1,在展示模型每层输出的形状时显示的 batch_size
  • device:“cuda"或者"cpu”

使用时需要注意,默认device=‘cuda’,如果是在‘cpu’,那么就需要更改。不匹配就会出现下面的错误:

import torch
from model.lenet import LeNet
from torchsummary import summary

# 模型

lenet = LeNet(classes=2)

print(summary(lenet, (3, 32, 32), device="cpu"))


#输入结果如下所示:下述信息分别有模型每层的输出形状,每层的参数数量,总的参数数量,以及模型大小等信息。
#由结果可得,模型的大小是0.23MB

----------------------------------------------------------------
        Layer (type)               Output Shape         Param #
================================================================
            Conv2d-1            [-1, 6, 28, 28]             456
            Conv2d-2           [-1, 16, 10, 10]           2,416
            Linear-3                  [-1, 120]          48,120
            Linear-4                   [-1, 84]          10,164
            Linear-5                    [-1, 2]             170
================================================================
Total params: 61,326
Trainable params: 61,326
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.01
Forward/backward pass size (MB): 0.05
Params size (MB): 0.23
Estimated Total Size (MB): 0.30
----------------------------------------------------------------
None
### 回答1: MAdds是指模型中的乘加操作数量,即模型的 Multiply-Adds。PyTorch中可以使用torch.profiler模块来计算模型的MAdds。 例如,以下代码可以计算一个模型的MAdds: ```python import torch from torch.profiler import profile, record_function, ProfilerActivity class MyModel(torch.nn.Module): def __init__(self): super(MyModel, self).__init__() self.conv1 = torch.nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1) self.conv2 = torch.nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1) self.fc1 = torch.nn.Linear(128 * 32 * 32, 10) def forward(self, x): x = self.conv1(x) x = self.conv2(x) x = x.view(-1, 128 * 32 * 32) x = self.fc1(x) return x model = MyModel() input_data = torch.randn(1, 3, 32, 32) with profile(activities=[ProfilerActivity.CPU], record_shapes=True) as prof: with record_function("model_inference"): model(input_data) print(prof.key_averages().table(sort_by="cpu_time_total", row_limit=10)) ``` 输出结果中包含了模型的MAdds,可以在`CPU time`列中查看。 ### 回答2: PyTorch中的MAdds是指计算神经网络模型中的乘法加法操作的总次数。MAdds是衡量模型计算负载响应时间的一项重要指标。 MAdds的计算公式为:MAdds = 2 * FLOPs / 10^6。 其中FLOPs(Floating Point Operations)表示浮点运算次数。一次浮点运算包括一次乘法一次加法操作。MAdds的单位是百万次浮点运算。 计算MAdds可以帮助我们评估模型的计算复杂度性能。通常情况下,模型的MAdds值越大,表示模型的计算负担越重,需要更多的计算资源。因此,了解MAdds可以在模型选择优化时提供有用的参考。 PyTorch提供了一些工具库,可以方便地计算模型的MAdds值。例如,torchstat库可以通过分析模型的每一层操作来自动计算模型的MAdds值。 在使用PyTorch开发深度学习模型时,了解模型的MAdds可以帮助我们更好地优化模型的结构参数,以提高模型的运行效率性能。同时,对于在资源受限的设备上部署模型,MAdds值的估算也可以帮助我们选择适合的模型算法,以保证模型的计算要求可以被满足。 ### 回答3: PyTorch MAdds是指在PyTorch中用于估计模型计算量的指标,它代表了模型在执行一次前向传播过程中的浮点乘法加法的次数总。在深度学习中,计算量通常是衡量模型复杂性计算效率的重要指标之一。 MAdds是根据模型中的每层操作的输入输出张量的维度来计算得出的。在计算过程中,对于每个操作的输入输出张量,MAdds都会计算相应的浮点乘法加法次数,然后把它们累加起来。这样,我们就可以通过MAdds指标来比较不同模型的计算量大小复杂性。 使用PyTorchtorchsummary库,我们可以很方便地获取模型的MAdds值。只需将模型实例传入summary函数并指定输入张量的维度大小,就能够得到模型的MAdds计算结果。 通过使用PyTorch MAdds,我们可以更好地了解模型的计算量,从而有助于优化模型的设计计算效率。对于有限的计算资源,比如边缘设备或嵌入式系统,我们可以通过MAdds来评估模型是否适合在这些资源受限的环境中运行。 总之,PyTorch MAdds是用于衡量模型计算量的指标,可以帮助我们评估优化深度学习模型的设计计算效率。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值