Модель Deep Conv количество параметров - PullRequest
0 голосов
/ 20 февраля 2019

Я читал это утверждение:

CNN с двумя слоями свертки 5x5 (первый с 32 каналами, второй с 64, каждый с последующим максимальным объединением 2x2), полностью связанный слой с512 единиц и активация ReLu, и окончательный выходной слой softmax (1 663 370 общих параметров)

Я не понимаю, как они вычисляют параметры 1,6 м.Та же самая сетевая реализация дает мне ~ 580 тыс. Параметров, что более реалистично, учитывая, что это небольшая сеть.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Рассмотрим этот обман, но вот как получается 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)
)

Теперь параметры:

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

Слой за слоем:

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 голосов
/ 20 февраля 2019

Предположим, вы говорите об изображениях MNIST, 1 входной канал, шаг = 1, отступ = 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...