에서 알렉스 Krizhevsky, 등. 심층 컨볼 루션 신경망을 사용한 이미지 넷 분류 는 각 계층의 뉴런 수를 열거합니다 (아래 다이어그램 참조).
네트워크의 입력은 150,528 차원이며 네트워크의 나머지 계층에있는 뉴런의 수는 253,440–186,624–64,896–64,896–43,264–4096–4096–1000으로 제공됩니다.
3D 뷰
첫 번째 이후의 모든 층에 대한 뉴런의 수는 분명합니다. 뉴런을 계산하는 간단한 방법 중 하나는 해당 레이어의 3 차원을 단순히 곱하는 것입니다 ( planes X width X height
).
- 레이어 2 :
27x27x128 * 2 = 186,624
- 레이어 3 :
13x13x192 * 2 = 64,896
- 기타
그러나 첫 번째 레이어를 보면 :
- 층 1 :
55x55x48 * 2 = 290400
이는 것을 알 수 없습니다 253,440
로 종이에 지정된!
출력 크기 계산
컨벌루션의 출력 텐서를 계산하는 다른 방법은 다음과 같습니다.
입력 화상은 3D 텐서 인 경우
nInputPlane x height x width
, 출력 영상 사이즈 것이다nOutputPlane x owidth x oheight
곳
owidth = (width - kW) / dW + 1
oheight = (height - kH) / dH + 1
.
( 토치 SpatialConvolution 문서에서 )
입력 이미지는 다음과 같습니다
nInputPlane = 3
height = 224
width = 224
컨볼 루션 레이어는 다음과 같습니다.
nOutputPlane = 96
kW = 11
kH = 11
dW = 4
dW = 4
(예 : 커널 크기 11
, 보폭 4
)
우리는 그 숫자를 꽂습니다.
owidth = (224 - 11) / 4 + 1 = 54
oheight = (224 - 11) / 4 + 1 = 54
따라서 55x55
용지와 일치하는 데 필요한 치수 중 하나가 부족 합니다. 패딩 일 수 있습니다 (그러나 cuda-convnet2
모델은 명시 적으로 패딩을 0으로 설정합니다)
54
크기를 측정하면 96x54x54 = 279,936
뉴런 이 생깁니다 . 여전히 너무 많습니다.
그래서 내 질문은 이것입니다 :
첫 번째 컨볼 루션 레이어에 대해 어떻게 253,440 개의 뉴런을 얻습니까? 내가 무엇을 놓치고 있습니까?