In Alex Krizhevsky, et al. La classificazione di Imagenet con reti neurali profonde convoluzionali enumera il numero di neuroni in ogni strato (vedi diagramma sotto).
L'input della rete è di 150.528 dimensioni e il numero di neuroni negli strati rimanenti della rete è dato da 253.440–186.624–64.896–64.896–43.264– 4096–4096–1000.
Una vista 3D
Il numero di neuroni per tutti gli strati dopo il primo è chiaro. Un modo semplice per calcolare i neuroni è semplicemente moltiplicare le tre dimensioni di quello strato ( planes X width X height
):
- Strato 2:
27x27x128 * 2 = 186,624
- Livello 3:
13x13x192 * 2 = 64,896
- eccetera.
Tuttavia, guardando il primo strato:
- Strato 1:
55x55x48 * 2 = 290400
Si noti che questo non è 253,440
come specificato nel documento!
Calcola le dimensioni dell'output
L'altro modo per calcolare il tensore di output di una convoluzione è:
Se l'immagine di input è un tensore 3D
nInputPlane x height x width
, la dimensione dell'immagine di output sarànOutputPlane x owidth x oheight
dove
owidth = (width - kW) / dW + 1
oheight = (height - kH) / dH + 1
.
(dalla documentazione di Torch SpatialConvolution )
L'immagine di input è:
nInputPlane = 3
height = 224
width = 224
E il livello di convoluzione è:
nOutputPlane = 96
kW = 11
kH = 11
dW = 4
dW = 4
(es. dimensione del kernel 11
, falcata 4
)
Collegando questi numeri otteniamo:
owidth = (224 - 11) / 4 + 1 = 54
oheight = (224 - 11) / 4 + 1 = 54
Quindi siamo a corto di 55x55
dimensioni di cui abbiamo bisogno per abbinare il foglio. Potrebbero essere padding (ma il cuda-convnet2
modello imposta esplicitamente il padding su 0)
Se prendiamo le 54
dimensioni della dimensione otteniamo i 96x54x54 = 279,936
neuroni - ancora troppi.
Quindi la mia domanda è questa:
Come ottengono 253.440 neuroni per il primo strato convoluzionale? Cosa mi sto perdendo?