1. Thop
1.1 安装
打开cmd,输入pip install thop。(链接Thop)
1.2 使用
from torchvision.models import resnet50
from thop import profile
model = resnet50()
input = torch.randn(1, 3, 224, 224)
flops, params = profile(model, inputs=(input, ))
结果:
Reloaded modules: model, dataloader, construct_1d_dataset, logger, epoch_test
Register FLOP counter for module Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)
Register FLOP counter for module BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module ReLU(inplace)
Register FLOP counter for module MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)
Register FLOP counter for module Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module ReLU(inplace)
Register FLOP counter for module Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module ReLU(inplace)
Register FLOP counter for module Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module ReLU(inplace)
Register FLOP counter for module Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module ReLU(inplace)
Register FLOP counter for module Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)
Register FLOP counter for module BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module ReLU(inplace)
Register FLOP counter for module Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module ReLU(inplace)
Register FLOP counter for module Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module ReLU(inplace)
Register FLOP counter for module Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module ReLU(inplace)
Register FLOP counter for module Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)
Register FLOP counter for module BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module ReLU(inplace)
Register FLOP counter for module Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module ReLU(inplace)
Register FLOP counter for module Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module ReLU(inplace)
Register FLOP counter for module Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module ReLU(inplace)
Register FLOP counter for module Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module ReLU(inplace)
Register FLOP counter for module Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module ReLU(inplace)
Register FLOP counter for module Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)
Register FLOP counter for module BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module ReLU(inplace)
Register FLOP counter for module Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)
Register FLOP counter for module BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
Register FLOP counter for module ReLU(inplace)
Register FLOP counter for module AdaptiveAvgPool2d(output_size=(1, 1))
Register FLOP counter for module Linear(in_features=2048, out_features=1000, bias=True)
2. torchsummary
2.1 安装
打开cmd,输入pip install torchsummary
2.2 使用
import torch
import torchvision.models as models
from torchsummary import summary
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = models.resnet18().to(device)
summary(model, (3,256,256))
结果:
----------------------------------------------------------------
Layer (type) Output Shape Param #
================================================================
Conv2d-1 [-1, 64, 128, 128] 9,408
BatchNorm2d-2 [-1, 64, 128, 128] 128
ReLU-3 [-1, 64, 128, 128] 0
MaxPool2d-4 [-1, 64, 64, 64] 0
Conv2d-5 [-1, 64, 64, 64] 36,864
BatchNorm2d-6 [-1, 64, 64, 64] 128
ReLU-7 [-1, 64, 64, 64] 0
Conv2d-8 [-1, 64, 64, 64] 36,864
BatchNorm2d-9 [-1, 64, 64, 64] 128
ReLU-10 [-1, 64, 64, 64] 0
BasicBlock-11 [-1, 64, 64, 64] 0
Conv2d-12 [-1, 64, 64, 64] 36,864
BatchNorm2d-13 [-1, 64, 64, 64] 128
ReLU-14 [-1, 64, 64, 64] 0
Conv2d-15 [-1, 64, 64, 64] 36,864
BatchNorm2d-16 [-1, 64, 64, 64] 128
ReLU-17 [-1, 64, 64, 64] 0
BasicBlock-18 [-1, 64, 64, 64] 0
Conv2d-19 [-1, 128, 32, 32] 73,728
BatchNorm2d-20 [-1, 128, 32, 32] 256
ReLU-21 [-1, 128, 32, 32] 0
Conv2d-22 [-1, 128, 32, 32] 147,456
BatchNorm2d-23 [-1, 128, 32, 32] 256
Conv2d-24 [-1, 128, 32, 32] 8,192
BatchNorm2d-25 [-1, 128, 32, 32] 256
ReLU-26 [-1, 128, 32, 32] 0
BasicBlock-27 [-1, 128, 32, 32] 0
Conv2d-28 [-1, 128, 32, 32] 147,456
BatchNorm2d-29 [-1, 128, 32, 32] 256
ReLU-30 [-1, 128, 32, 32] 0
Conv2d-31 [-1, 128, 32, 32] 147,456
BatchNorm2d-32 [-1, 128, 32, 32] 256
ReLU-33 [-1, 128, 32, 32] 0
BasicBlock-34 [-1, 128, 32, 32] 0
Conv2d-35 [-1, 256, 16, 16] 294,912
BatchNorm2d-36 [-1, 256, 16, 16] 512
ReLU-37 [-1, 256, 16, 16] 0
Conv2d-38 [-1, 256, 16, 16] 589,824
BatchNorm2d-39 [-1, 256, 16, 16] 512
Conv2d-40 [-1, 256, 16, 16] 32,768
BatchNorm2d-41 [-1, 256, 16, 16] 512
ReLU-42 [-1, 256, 16, 16] 0
BasicBlock-43 [-1, 256, 16, 16] 0
Conv2d-44 [-1, 256, 16, 16] 589,824
BatchNorm2d-45 [-1, 256, 16, 16] 512
ReLU-46 [-1, 256, 16, 16] 0
Conv2d-47 [-1, 256, 16, 16] 589,824
BatchNorm2d-48 [-1, 256, 16, 16] 512
ReLU-49 [-1, 256, 16, 16] 0
BasicBlock-50 [-1, 256, 16, 16] 0
Conv2d-51 [-1, 512, 8, 8] 1,179,648
BatchNorm2d-52 [-1, 512, 8, 8] 1,024
ReLU-53 [-1, 512, 8, 8] 0
Conv2d-54 [-1, 512, 8, 8] 2,359,296
BatchNorm2d-55 [-1, 512, 8, 8] 1,024
Conv2d-56 [-1, 512, 8, 8] 131,072
BatchNorm2d-57 [-1, 512, 8, 8] 1,024
ReLU-58 [-1, 512, 8, 8] 0
BasicBlock-59 [-1, 512, 8, 8] 0
Conv2d-60 [-1, 512, 8, 8] 2,359,296
BatchNorm2d-61 [-1, 512, 8, 8] 1,024
ReLU-62 [-1, 512, 8, 8] 0
Conv2d-63 [-1, 512, 8, 8] 2,359,296
BatchNorm2d-64 [-1, 512, 8, 8] 1,024
ReLU-65 [-1, 512, 8, 8] 0
BasicBlock-66 [-1, 512, 8, 8] 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.75
Forward/backward pass size (MB): 82.01
Params size (MB): 44.59
Estimated Total Size (MB): 127.35
----------------------------------------------------------------
3. torchviz
3.1 安装
打开cmd,输入pip install torchviz。
3.2 使用
from torchvision.models import AlexNet
from torchviz import make_dot
model = AlexNet()
x = torch.randn(1, 3, 227, 227)
y = model(x)
vise=make_dot(y, params=dict(model.named_parameters()))
vise.view()
结果(以PDF格式保存在源程序所在文件夹):