Czytałem to oświadczenie:

CNN z dwoma warstwami 5x5 konwutowaną (pierwszą z 32 kanałami, drugi z 64, z których każda obsłużyła z 2x2 max pooling), całkowicie podłączoną warstwą z 512 jednostkami i aktywacją Relu oraz końcowej warstwy wyjściowej Softmax (1,663370 całkowitych parametrów)

Nie widzę, jak obliczają 1,6 mln parametrów. Ta sama implementacja sieci daje mi parametry 580 tys., Co jest bardziej realistyczne, biorąc pod uwagę, że jest to mała sieć.

-2
Mrst 20 luty 2019, 17:22

2 odpowiedzi

Najlepsza odpowiedź

Zakładając, że mówisz o zdjęciach MNIST, 1 kanał wejściowy, Stride = 1, Padding = 2

INPUT:    [28x28x1]   weights: 0
CONV5-32: [28x28x32]  weights: (1*5*5)*32 + 32  =       832 
POOL2:    [14x14x32]  weights: 0
CONV5-64: [14x14x64]  weights: (5*5*32)*64 + 64 =    51,264 
POOL2:    [7x7x64]    weights: 0
FC:       [1x1x512]   weights: 7*7*64*512 + 512 = 1,606,144
Softmax:  [1x1x10]    weights: 512*10 + 10      =     5,130 
-----------------------------------------------------------
                                                  1,663,370
0
SaiBot 21 luty 2019, 09:14

Rozważ to oszustwo, ale tutaj uzyskano 1663370:

import torch.nn as nn

#First fully-connected (linear) layer input size as in the accepted answer:
linear_in = 7*7*64

model = nn.Sequential(
    nn.Conv2d(1,32,5),
    nn.MaxPool2d(2,2),
    nn.Conv2d(32,64,5),
    nn.MaxPool2d(2,2),
    nn.Linear(linear_in, 512), 
    nn.ReLU(),
    nn.Linear(512,10)
)

Teraz parametry:

sum([p.numel() for p in model.parameters()])
1663370

Warstwa po warstwie:

for p in model.parameters():
    print(p.size())
    print(p.numel())

torch.Size([32, 1, 5, 5])
800
torch.Size([32])
32
torch.Size([64, 32, 5, 5])
51200
torch.Size([64])
64
torch.Size([512, 3136])
1605632
torch.Size([512])
512
torch.Size([10, 512])
5120
torch.Size([10])
10
0
Artem Trunov 20 luty 2019, 18:32