Pytorch – 使用torchsummary/torchsummaryX/torchinfo库打印模型结构、输出维度和参数信息
1 torchsummary/torchsummaryX
torchsummary Github地址:https://github.com/sksq96/pytorch-summary
torchsummaryX Github地址:https://github.com/nmhkahn/torchsummaryX
torchinfo Github地址:https://github.com/TylerYep/torchinfo
1.1 安装
安装torchsummary
pip install torchsummary
安装torchsummaryX
pip install torchsummaryX
安装torchinfo
pip
pip install torchinfo
conda
conda install -c conda-forge torchinfo
1.2 使用
1.2.1 torchsummary的使用
from torchvision import models
from torchsummary import summary
if __name__ == '__main__':
resnet18 = models.resnet18().cuda() # 不加.cuda()会报错
summary(resnet18, (3, 224, 224))
输出
----------------------------------------------------------------
Layer (type) Output Shape Param #
================================================================
Conv2d-1 [-1, 64, 112, 112] 9,408
BatchNorm2d-2 [-1, 64, 112, 112] 128
ReLU-3 [-1, 64, 112, 112] 0
MaxPool2d-4 [-1, 64, 56, 56] 0
Conv2d-5 [-1, 64, 56, 56] 36,864
BatchNorm2d-6 [-1, 64, 56, 56] 128
ReLU-7 [-1, 64, 56, 56] 0
Conv2d-8 [-1, 64, 56, 56] 36,864
BatchNorm2d-9 [-1, 64, 56, 56] 128
ReLU-10 [-1, 64, 56, 56] 0
BasicBlock-11 [-1, 64, 56, 56] 0
Conv2d-12 [-1, 64, 56, 56] 36,864
BatchNorm2d-13 [-1, 64, 56, 56] 128
ReLU-14 [-1, 64, 56, 56] 0
Conv2d-15 [-1, 64, 56, 56] 36,864
BatchNorm2d-16 [-1, 64, 56, 56] 128
ReLU-17 [-1, 64, 56, 56] 0
BasicBlock-18 [-1, 64, 56, 56] 0
Conv2d-19 [-1, 128, 28, 28] 73,728
BatchNorm2d-20 [-1, 128, 28, 28] 256
ReLU-21 [-1, 128, 28, 28] 0
Conv2d-22 [-1, 128, 28, 28] 147,456
BatchNorm2d-23 [-1, 128, 28, 28] 256
Conv2d-24 [-1, 128, 28, 28] 8,192
BatchNorm2d-25 [-1, 128, 28, 28] 256
ReLU-26 [-1, 128, 28, 28] 0
BasicBlock-27 [-1, 128, 28, 28] 0
Conv2d-28 [-1, 128, 28, 28] 147,456
BatchNorm2d-29 [-1, 128, 28, 28] 256
ReLU-30 [-1, 128, 28, 28] 0
Conv2d-31 [-1, 128, 28, 28] 147,456
BatchNorm2d-32 [-1, 128, 28, 28] 256
ReLU-33 [-1, 128, 28, 28] 0
BasicBlock-34 [-1, 128, 28, 28] 0
Conv2d-35 [-1, 256, 14, 14] 294,912
BatchNorm2d-36 [-1, 256, 14, 14] 512
ReLU-37 [-1, 256, 14, 14] 0
Conv2d-38 [-1, 256, 14, 14] 589,824
BatchNorm2d-39 [-1, 256, 14, 14] 512
Conv2d-40 [-1, 256, 14, 14] 32,768
BatchNorm2d-41 [-1, 256, 14, 14] 512
ReLU-42 [-1, 256, 14, 14] 0
BasicBlock-43 [-1, 256, 14, 14] 0
Conv2d-44 [-1, 256, 14, 14] 589,824
BatchNorm2d-45 [-1, 256, 14, 14] 512
ReLU-46 [-1, 256, 14, 14] 0
Conv2d-47 [-1, 256, 14, 14] 589,824
BatchNorm2d-48 [-1, 256, 14, 14] 512
ReLU-49 [-1, 256, 14, 14] 0
BasicBlock-50 [-1, 256, 14, 14] 0
Conv2d-51 [-1, 512, 7, 7] 1,179,648
BatchNorm2d-52 [-1, 512, 7, 7] 1,024
ReLU-53 [-1, 512, 7, 7] 0
Conv2d-54 [-1, 512, 7, 7] 2,359,296
BatchNorm2d-55 [-1, 512, 7, 7] 1,024
Conv2d-56 [-1, 512, 7, 7] 131,072
BatchNorm2d-57 [-1, 512, 7, 7] 1,024
ReLU-58 [-1, 512, 7, 7] 0
BasicBlock-59 [-1, 512, 7, 7] 0
Conv2d-60 [-1, 512, 7, 7] 2,359,296
BatchNorm2d-61 [-1, 512, 7, 7] 1,024
ReLU-62 [-1, 512, 7, 7] 0
Conv2d-63 [-1, 512, 7, 7] 2,359,296
BatchNorm2d-64 [-1, 512, 7, 7] 1,024
ReLU-65 [-1, 512, 7, 7] 0
BasicBlock-66 [-1, 512, 7, 7] 0
AdaptiveAvgPool2d-67 [-1, 512, 1, 1] 0
Linear-68 [-1, 1000] 513,000
================================================================
Total params: 11,689,512
Trainable params: 11,689,512
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.57
Forward/backward pass size (MB): 62.79
Params size (MB): 44.59
Estimated Total Size (MB): 107.96
----------------------------------------------------------------
1.2.2 torchsummaryX的使用
import torch
import torch.nn as nn
from torchsummaryX import summary
class Net(nn.Module):
def __init__(self,
vocab_size=20, embed_dim=300,
hidden_dim=512, num_layers=2):
super().__init__()
self.hidden_dim = hidden_dim
self.embedding = nn.Embedding(vocab_size, embed_dim)
self.encoder = nn.LSTM(embed_dim, hidden_dim,
num_layers=num_layers)
self.decoder = nn.Linear(hidden_dim, vocab_size)
def forward(self, x):
embed = self.embedding(x)
out, hidden = self.encoder(embed)
out = self.decoder(out)
out = out.view(-1, out.size(2))
return out, hidden
if __name__ == '__main__':
inputs = torch.zeros((100, 1), dtype=torch.long) # [length, batch_size]
summary(Net(), inputs)
输出
===========================================================
Kernel Shape Output Shape Params Mult-Adds
Layer
0_embedding [300, 20] [100, 1, 300] 6000 6000
1_encoder - [100, 1, 512] 3768320 3760128
2_decoder [512, 20] [100, 1, 20] 10260 10240
-----------------------------------------------------------
Totals
Total params 3784580
Trainable params 3784580
Non-trainable params 0
Mult-Adds 3776368
===========================================================
1.2.3 torchinfo的使用
from torchvision import models
from torchinfo import summary
if __name__ == '__main__':
resnet18 = models.resnet18().cuda() # 不加.cuda()会报错
summary(resnet18, input_size=(1, 3, 244, 244))
输出
==========================================================================================
Layer (type:depth-idx) Output Shape Param #
==========================================================================================
ResNet [1, 1000] --
├─Conv2d: 1-1 [1, 64, 122, 122] 9,408
├─BatchNorm2d: 1-2 [1, 64, 122, 122] 128
├─ReLU: 1-3 [1, 64, 122, 122] --
├─MaxPool2d: 1-4 [1, 64, 61, 61] --
├─Sequential: 1-5 [1, 64, 61, 61] --
│ └─BasicBlock: 2-1 [1, 64, 61, 61] --
│ │ └─Conv2d: 3-1 [1, 64, 61, 61] 36,864
│ │ └─BatchNorm2d: 3-2 [1, 64, 61, 61] 128
│ │ └─ReLU: 3-3 [1, 64, 61, 61] --
│ │ └─Conv2d: 3-4 [1, 64, 61, 61] 36,864
│ │ └─BatchNorm2d: 3-5 [1, 64, 61, 61] 128
│ │ └─ReLU: 3-6 [1, 64, 61, 61] --
│ └─BasicBlock: 2-2 [1, 64, 61, 61] --
│ │ └─Conv2d: 3-7 [1, 64, 61, 61] 36,864
│ │ └─BatchNorm2d: 3-8 [1, 64, 61, 61] 128
│ │ └─ReLU: 3-9 [1, 64, 61, 61] --
│ │ └─Conv2d: 3-10 [1, 64, 61, 61] 36,864
│ │ └─BatchNorm2d: 3-11 [1, 64, 61, 61] 128
│ │ └─ReLU: 3-12 [1, 64, 61, 61] --
├─Sequential: 1-6 [1, 128, 31, 31] --
│ └─BasicBlock: 2-3 [1, 128, 31, 31] --
│ │ └─Conv2d: 3-13 [1, 128, 31, 31] 73,728
│ │ └─BatchNorm2d: 3-14 [1, 128, 31, 31] 256
│ │ └─ReLU: 3-15 [1, 128, 31, 31] --
│ │ └─Conv2d: 3-16 [1, 128, 31, 31] 147,456
│ │ └─BatchNorm2d: 3-17 [1, 128, 31, 31] 256
│ │ └─Sequential: 3-18 [1, 128, 31, 31] 8,448
│ │ └─ReLU: 3-19 [1, 128, 31, 31] --
│ └─BasicBlock: 2-4 [1, 128, 31, 31] --
│ │ └─Conv2d: 3-20 [1, 128, 31, 31] 147,456
│ │ └─BatchNorm2d: 3-21 [1, 128, 31, 31] 256
│ │ └─ReLU: 3-22 [1, 128, 31, 31] --
│ │ └─Conv2d: 3-23 [1, 128, 31, 31] 147,456
│ │ └─BatchNorm2d: 3-24 [1, 128, 31, 31] 256
│ │ └─ReLU: 3-25 [1, 128, 31, 31] --
├─Sequential: 1-7 [1, 256, 16, 16] --
│ └─BasicBlock: 2-5 [1, 256, 16, 16] --
│ │ └─Conv2d: 3-26 [1, 256, 16, 16] 294,912
│ │ └─BatchNorm2d: 3-27 [1, 256, 16, 16] 512
│ │ └─ReLU: 3-28 [1, 256, 16, 16] --
│ │ └─Conv2d: 3-29 [1, 256, 16, 16] 589,824
│ │ └─BatchNorm2d: 3-30 [1, 256, 16, 16] 512
│ │ └─Sequential: 3-31 [1, 256, 16, 16] 33,280
│ │ └─ReLU: 3-32 [1, 256, 16, 16] --
│ └─BasicBlock: 2-6 [1, 256, 16, 16] --
│ │ └─Conv2d: 3-33 [1, 256, 16, 16] 589,824
│ │ └─BatchNorm2d: 3-34 [1, 256, 16, 16] 512
│ │ └─ReLU: 3-35 [1, 256, 16, 16] --
│ │ └─Conv2d: 3-36 [1, 256, 16, 16] 589,824
│ │ └─BatchNorm2d: 3-37 [1, 256, 16, 16] 512
│ │ └─ReLU: 3-38 [1, 256, 16, 16] --
├─Sequential: 1-8 [1, 512, 8, 8] --
│ └─BasicBlock: 2-7 [1, 512, 8, 8] --
│ │ └─Conv2d: 3-39 [1, 512, 8, 8] 1,179,648
│ │ └─BatchNorm2d: 3-40 [1, 512, 8, 8] 1,024
│ │ └─ReLU: 3-41 [1, 512, 8, 8] --
│ │ └─Conv2d: 3-42 [1, 512, 8, 8] 2,359,296
│ │ └─BatchNorm2d: 3-43 [1, 512, 8, 8] 1,024
│ │ └─Sequential: 3-44 [1, 512, 8, 8] 132,096
│ │ └─ReLU: 3-45 [1, 512, 8, 8] --
│ └─BasicBlock: 2-8 [1, 512, 8, 8] --
│ │ └─Conv2d: 3-46 [1, 512, 8, 8] 2,359,296
│ │ └─BatchNorm2d: 3-47 [1, 512, 8, 8] 1,024
│ │ └─ReLU: 3-48 [1, 512, 8, 8] --
│ │ └─Conv2d: 3-49 [1, 512, 8, 8] 2,359,296
│ │ └─BatchNorm2d: 3-50 [1, 512, 8, 8] 1,024
│ │ └─ReLU: 3-51 [1, 512, 8, 8] --
├─AdaptiveAvgPool2d: 1-9 [1, 512, 1, 1] --
├─Linear: 1-10 [1, 1000] 513,000
==========================================================================================
Total params: 11,689,512
Trainable params: 11,689,512
Non-trainable params: 0
Total mult-adds (G): 2.27
==========================================================================================
Input size (MB): 0.71
Forward/backward pass size (MB): 48.20
Params size (MB): 46.76
Estimated Total Size (MB): 95.67
==========================================================================================
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:Pytorch – 使用torchsummary/torchsummaryX/torchinfo库打印模型结构、输出维度和参数信息
原文链接:https://www.stubbornhuang.com/2184/
发布于:2022年06月27日 9:42:10
修改于:2023年06月25日 21:03:18
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
50