Pytorch:打印模型中每一层的输出大小shape与参数量

简介

在使用Pytorch编写模型时,为了验证检查代码是否正确,需要查看模型每一层的输出shape或是模型结构。
然而在Pytorch只能够直接查看模型的结构,无法简单、直观地查看每一层的输出大小,需要自行手动计算,并且在输入shape改变时,每一层的输出同样随之变化,需要重复计算。
因此,这里建议使用一个工具,torchsummary
Github链接

torchsummary

安装
pip install torchsummary
使用
from torchsummary import summary
summary(your_model, input_size=(channels, H, W))
示例

VGG16:

import torch
from torchvision import models
from torchsummary import summary

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
vgg = models.vgg16().to(device)

summary(vgg, (3, 224, 224))

输出

----------------------------------------------------------------
        Layer (type)               Output Shape         Param #
================================================================
            Conv2d-1         [-1, 64, 224, 224]           1,792
              ReLU-2         [-1, 64, 224, 224]               0
            Conv2d-3         [-1, 64, 224, 224]          36,928
              ReLU-4         [-1, 64, 224, 224]               0
         MaxPool2d-5         [-1, 64, 112, 112]               0
            Conv2d-6        [-1, 128, 112, 112]          73,856
              ReLU-7        [-1, 128, 112, 112]               0
            Conv2d-8        [-1, 128, 112, 112]         147,584
              ReLU-9        [-1, 128, 112, 112]               0
        MaxPool2d-10          [-1, 128, 56, 56]               0
           Conv2d-11          [-1, 256, 56, 56]         295,168
             ReLU-12          [-1, 256, 56, 56]               0
           Conv2d-13          [-1, 256, 56, 56]         590,080
             ReLU-14          [-1, 256, 56, 56]               0
           Conv2d-15          [-1, 256, 56, 56]         590,080
             ReLU-16          [-1, 256, 56, 56]               0
        MaxPool2d-17          [-1, 256, 28, 28]               0
           Conv2d-18          [-1, 512, 28, 28]       1,180,160
             ReLU-19          [-1, 512, 28, 28]               0
           Conv2d-20          [-1, 512, 28, 28]       2,359,808
             ReLU-21          [-1, 512, 28, 28]               0
           Conv2d-22          [-1, 512, 28, 28]       2,359,808
             ReLU-23          [-1, 512, 28, 28]               0
        MaxPool2d-24          [-1, 512, 14, 14]               0
           Conv2d-25          [-1, 512, 14, 14]       2,359,808
             ReLU-26          [-1, 512, 14, 14]               0
           Conv2d-27          [-1, 512, 14, 14]       2,359,808
             ReLU-28          [-1, 512, 14, 14]               0
           Conv2d-29          [-1, 512, 14, 14]       2,359,808
             ReLU-30          [-1, 512, 14, 14]               0
        MaxPool2d-31            [-1, 512, 7, 7]               0
           Linear-32                 [-1, 4096]     102,764,544
             ReLU-33                 [-1, 4096]               0
          Dropout-34                 [-1, 4096]               0
           Linear-35                 [-1, 4096]      16,781,312
             ReLU-36                 [-1, 4096]               0
          Dropout-37                 [-1, 4096]               0
           Linear-38                 [-1, 1000]       4,097,000
================================================================
Total params: 138,357,544
Trainable params: 138,357,544
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.57
Forward/backward pass size (MB): 218.59
Params size (MB): 527.79
Estimated Total Size (MB): 746.96
----------------------------------------------------------------
注意事项

vgg = models.vgg16().to(device),需要将模型输入至cuda,之后才可输出结构,否则会报错。
另外,这里没有验证过device='cpu’的情况,不确定是否是因为没有显式地固定网络存储位置造成的错误。

  • 11
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
输出模型大小数量,可以使用 PyTorch 的 `summary` 函数。下面是一个简单的示例: ```python import torch from torchsummary import summary from transformers import GPT2Model, GPT2Tokenizer # 加载预训练模型和分词器 tokenizer = GPT2Tokenizer.from_pretrained('gpt2') model = GPT2Model.from_pretrained('gpt2') # 创建一个示例输入 input_ids = tokenizer.encode("Hello, world!", return_tensors='pt') # 使用 summary 函数输出模型大小数量 summary(model, input_size=(1, input_ids.shape[1]), device='cpu') ``` 上述代码,我们使用 PyTorch 的 `summary` 函数输出模型大小数量。其,`input_size` 数表示模型输入的大小,`device` 数表示模型运行的设备。 输出的结果类似于下面这样: ``` ---------------------------------------------------------------- Layer (type) Output Shape Param # ================================================================ embeddings.word_embeddings (Embedding) [1, 7, 768] 38,603,520 embeddings.position_embeddings (Embedding) [1, 7, 768] 393,216 LayerNorm (LayerNorm) [1, 7, 768] 1,536 Dropout (Dropout) [1, 7, 768] 0 ... ================================================================ Total params: 124,439,808 Trainable params: 0 Non-trainable params: 124,439,808 ---------------------------------------------------------------- Input size (MB): 0.00 Forward/backward pass size (MB): 0.02 Params size (MB): 474.23 Estimated Total Size (MB): 474.25 ---------------------------------------------------------------- ``` 我们可以看到,输出包括每一层的名称、输出形状和数量,以及总数量模型大小(单位为 MB)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值