이번 시간에는 좀 더 발전된 CNN에 대해서 알아보도록 하겠다.
여러 필터의 사이즈 중에서 어떤 것을 사용해야할까? 위 예에서는 5 x 5, 3 x 3, 1 x 1의 필터들을 쓴 다음 합친다.
맨 처음에 1 x 1 필터로 convolution을 한 뒤 5 x 5, 3 x 3 등과 연결하고, average pooling도 따로 수행한다.
그렇다면 왜 1 x 1 convolution을 수행해야할까? 우리가 56 x 56 이미지를 가지고 있고, 그것의 깊이가 64라고 하자.
우리는 1 x 1 convolution을 여기에 적용하면 결과는 1 x 56 x 56이 될 것이다. dot product이기 때문에
결과의 채널이 1의 깊이를 가지게 되는 것이다.
1 x 1 convolutional layer로 우리는 필터의 개수를 조정해서 결과의 depth를 결정할 수 있다.
크기는 56 x 56으로 똑같지만 depth만 다른 결과를 만들 수 있는 것이다.
예를 들어, 채널이 192인 28 x 28 이미지가 있다고 하자. convolution을 거쳐서 32 채널의 28 x 28을 만드려고 한다.
5 x 5와 패딩을 사용한 32개의 필터로 같은 크기의 32 채널의 결과를 얻을 수 있다.
만약 1 x 1 convolution이 없었다면 위와 같이 너무 많은 연산이 필요했을 것이다.
위와 같이 구현해보겠다.
전체 코드는 위와 같다.
'AI > PyTorchZeroToAll by Sung Kim' 카테고리의 다른 글
[PyTorchZeroToAll] 10. CNN (0) | 2020.01.28 |
---|---|
[PyTorchZeroToAll] 9. Softmax Classifier (0) | 2020.01.27 |
[PyTorchZeroToAll] 8. PyTorch DataLoader (0) | 2020.01.27 |
[PyTorchZeroToAll] 7. Wide and Deep (0) | 2020.01.27 |
[PyTorchZeroToAll] 6. Logistic Regression (0) | 2020.01.23 |