Input channel이 1이고, output channel도 1인 경우는 단순히 single-channel image에 convolution을 하고 bias term을 더해주면 된다.
아래 그림에서는 bias term은 생략됐지만, 2*2 kernel을 사용하고 추가로 bias term이 하나 있으니 이 경우 총 parameter 수는 5이다.
그러나 실제로 deep learning model에 convolution layer을 이용할 때에는 input channel의 수도 여러 개이고, output channel의 수도 여러 개인 경우가 많다.
이 경우 parameter 개수를 계산하는 법을 설명하겠다.
Input channel의 수를 $C_{in}$, output channel의 수를 $C_{out}$,
kernel size를 $K*K$라고 하자.
- 하나의 output channel을 만드는 데에는 $C_{in}$개의 kernel과 하나의 bias term이 필요하다. 그 과정은 다음과 같다.
- 각 input channel에 하나의 kernel이 필요하다.
- 각 input channel마다 각각의 kernel을 이용해 convolution 연산을 한 후, 그 결과들을 모두 더한다.
- 더한 결과에 bias term을 더해준다.
- 위 과정을 output channel의 수만큼 반복해줘야 하기 때문에, 총 $C_{out}$ * $C_{in}$개의 kernel과 $C_{out}$개의 bias term이 필요하다.
- 이때 각 kernel은 $K*K$개의 parameter을 가지고 있으므로, 필요한 총 parameter의 개수는 다음과 같다.
$num\_parameters = (K*K)*C_{in}*C_{out}+C_{out}$
torchsummary
와 parameters()
method를 이용해 다음과 같이 parameter 개수를 확인할 수 있다.
import torch
import torch.nn as nn
from torchsummary import summary
Conv1 = nn.Sequential(nn.Conv2d(2,5,3))
summary(Conv1, (2, 64, 64), device='cpu')
list(nn.Conv2d(2,5,3).parameters())
'🌌 Deep Learning > DL & ML 조각 지식' 카테고리의 다른 글
Transformer의 positional encoding (PE) (0) | 2021.10.18 |
---|---|
[ML] Kernel Density Estimation (KDE)와 Kernel Regression (KR) (0) | 2021.10.18 |
MSE Loss (L2 Loss) vs. MAE Loss (L1 Loss) (0) | 2021.01.19 |