11 KiB
11 KiB
import torchvision
import torch.nn as nn
import torch
import torch.nn.functional as F
from torchvision import transforms,models,datasets
!pip install torch_summary
from torchsummary import summary
device = 'cuda' if torch.cuda.is_available() else 'cpu'
Requirement already satisfied: torch_summary in /usr/local/lib/python3.6/dist-packages (1.4.3)
model = models.vgg16(pretrained=True).to(device)
summary(model, torch.zeros(1,3,224,224));
========================================================================================== Layer (type:depth-idx) Output Shape Param # ========================================================================================== ├─Sequential: 1-1 [-1, 512, 7, 7] -- | └─Conv2d: 2-1 [-1, 64, 224, 224] 1,792 | └─ReLU: 2-2 [-1, 64, 224, 224] -- | └─Conv2d: 2-3 [-1, 64, 224, 224] 36,928 | └─ReLU: 2-4 [-1, 64, 224, 224] -- | └─MaxPool2d: 2-5 [-1, 64, 112, 112] -- | └─Conv2d: 2-6 [-1, 128, 112, 112] 73,856 | └─ReLU: 2-7 [-1, 128, 112, 112] -- | └─Conv2d: 2-8 [-1, 128, 112, 112] 147,584 | └─ReLU: 2-9 [-1, 128, 112, 112] -- | └─MaxPool2d: 2-10 [-1, 128, 56, 56] -- | └─Conv2d: 2-11 [-1, 256, 56, 56] 295,168 | └─ReLU: 2-12 [-1, 256, 56, 56] -- | └─Conv2d: 2-13 [-1, 256, 56, 56] 590,080 | └─ReLU: 2-14 [-1, 256, 56, 56] -- | └─Conv2d: 2-15 [-1, 256, 56, 56] 590,080 | └─ReLU: 2-16 [-1, 256, 56, 56] -- | └─MaxPool2d: 2-17 [-1, 256, 28, 28] -- | └─Conv2d: 2-18 [-1, 512, 28, 28] 1,180,160 | └─ReLU: 2-19 [-1, 512, 28, 28] -- | └─Conv2d: 2-20 [-1, 512, 28, 28] 2,359,808 | └─ReLU: 2-21 [-1, 512, 28, 28] -- | └─Conv2d: 2-22 [-1, 512, 28, 28] 2,359,808 | └─ReLU: 2-23 [-1, 512, 28, 28] -- | └─MaxPool2d: 2-24 [-1, 512, 14, 14] -- | └─Conv2d: 2-25 [-1, 512, 14, 14] 2,359,808 | └─ReLU: 2-26 [-1, 512, 14, 14] -- | └─Conv2d: 2-27 [-1, 512, 14, 14] 2,359,808 | └─ReLU: 2-28 [-1, 512, 14, 14] -- | └─Conv2d: 2-29 [-1, 512, 14, 14] 2,359,808 | └─ReLU: 2-30 [-1, 512, 14, 14] -- | └─MaxPool2d: 2-31 [-1, 512, 7, 7] -- ├─AdaptiveAvgPool2d: 1-2 [-1, 512, 7, 7] -- ├─Sequential: 1-3 [-1, 1000] -- | └─Linear: 2-32 [-1, 4096] 102,764,544 | └─ReLU: 2-33 [-1, 4096] -- | └─Dropout: 2-34 [-1, 4096] -- | └─Linear: 2-35 [-1, 4096] 16,781,312 | └─ReLU: 2-36 [-1, 4096] -- | └─Dropout: 2-37 [-1, 4096] -- | └─Linear: 2-38 [-1, 1000] 4,097,000 ========================================================================================== Total params: 138,357,544 Trainable params: 138,357,544 Non-trainable params: 0 Total mult-adds (G): 15.61 ========================================================================================== Input size (MB): 0.57 Forward/backward pass size (MB): 103.43 Params size (MB): 527.79 Estimated Total Size (MB): 631.80 ==========================================================================================
model
VGG( (features): Sequential( (0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (1): ReLU(inplace=True) (2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (3): ReLU(inplace=True) (4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) (5): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (6): ReLU(inplace=True) (7): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (8): ReLU(inplace=True) (9): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) (10): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (11): ReLU(inplace=True) (12): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (13): ReLU(inplace=True) (14): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (15): ReLU(inplace=True) (16): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) (17): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (18): ReLU(inplace=True) (19): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (20): ReLU(inplace=True) (21): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (22): ReLU(inplace=True) (23): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) (24): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (25): ReLU(inplace=True) (26): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (27): ReLU(inplace=True) (28): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (29): ReLU(inplace=True) (30): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) ) (avgpool): AdaptiveAvgPool2d(output_size=(7, 7)) (classifier): Sequential( (0): Linear(in_features=25088, out_features=4096, bias=True) (1): ReLU(inplace=True) (2): Dropout(p=0.5, inplace=False) (3): Linear(in_features=4096, out_features=4096, bias=True) (4): ReLU(inplace=True) (5): Dropout(p=0.5, inplace=False) (6): Linear(in_features=4096, out_features=1000, bias=True) ) )