Ich baue mein eigenes Modell und bevor ich es mit der vollständig verbundenen Ebene verbinde, frage ich immer: "Was sind die Eigenschaften der Eingabe?" Sie können die Struktur des Modells verstehen, indem Sie häufig "print (model)" eingeben, aber Sie können die Größe der Feature Map nicht überprüfen. Hier bietet sich die "Fackelzusammenfassung" an.
Einfach ausgedrückt ist es ein "Sie können die Größe der Feature-Map sehen".
Diesmal habe ich das folgende einfache Modell gemacht. Ich habe nicht geschrieben, bis ich es klassifiziere.
Falten ➡︎BN➡︎ReLU➡︎pooling➡︎ Falten ➡︎BN➡︎ReLU➡︎pooling➡︎ Falten ➡︎ Global Average Pooling
import torch
import torch.nn as nn
class SimpleCNN(nn.Module):
def __init__(self):
super(SimpleCNN,self).__init__()
self.conv1 = nn.Conv2d(3,16,kernel_size=3,stride=1)
self.bn1 = nn.BatchNorm2d(16)
self.relu = nn.ReLU(inplace=True)
self.maxpool = nn.MaxPool2d((2,2))
self.conv2 = nn.Conv2d(16,32,kernel_size=3,stride=1)
self.bn2 = nn.BatchNorm2d(32)
self.conv3 = nn.Conv2d(32,64,kernel_size=3,stride=1)
self.gap = nn.AdaptiveMaxPool2d(1)
def forward(self,x):
x = self.conv1(x)
x = self.bn1(x)
x = self.relu(x)
x = self.maxpool(x)
x = self.conv2(x)
x = self.bn2(x)
x = self.relu(x)
x = self.maxpool(x)
x = self.conv3(x)
x = self.gap(x)
return x
pip install torchsummary
from torchsummary import summary
model = SimpleCNN()
summary(model,(3,224,224)) # summary(model,(channels,H,W))
Dieses Mal versuche ich, eine Bildeingabegröße von 224 x 224 anzunehmen. Wenn Sie andere Auflösungen ausprobieren möchten, ändern Sie die Werte von "H" und "W".
----------------------------------------------------------------
Layer (type) Output Shape Param #
================================================================
Conv2d-1 [-1, 16, 222, 222] 448
BatchNorm2d-2 [-1, 16, 222, 222] 32
ReLU-3 [-1, 16, 222, 222] 0
MaxPool2d-4 [-1, 16, 111, 111] 0
Conv2d-5 [-1, 32, 109, 109] 4,640
BatchNorm2d-6 [-1, 32, 109, 109] 64
ReLU-7 [-1, 32, 109, 109] 0
MaxPool2d-8 [-1, 32, 54, 54] 0
Conv2d-9 [-1, 64, 52, 52] 18,496
AdaptiveMaxPool2d-10 [-1, 64, 1, 1] 0
================================================================
Total params: 23,680
Trainable params: 23,680
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.57
Forward/backward pass size (MB): 30.29
Params size (MB): 0.09
Estimated Total Size (MB): 30.95
----------------------------------------------------------------
Es ist sehr praktisch, die Form der Ausgabe überprüfen zu können. Ich bin dankbar, dass es auch die Anzahl der Parameter zählt.
Fackelsummary ist praktisch, also bitte benutzen.