🌌 Deep Learning/DL & ML 조각 지식

Convolution layer의 parameter 개수

복만 2021. 10. 4. 16:59

Input channel이 1이고, output channel도 1인 경우는 단순히 single-channel image에 convolution을 하고 bias term을 더해주면 된다.

 

 

아래 그림에서는 bias term은 생략됐지만, 2*2 kernel을 사용하고 추가로 bias term이 하나 있으니 이 경우 총 parameter 수는 5이다.

 

https://d2l.ai/chapter_convolutional-neural-networks/conv-layer.html

 

 

그러나 실제로 deep learning model에 convolution layer을 이용할 때에는 input channel의 수도 여러 개이고, output channel의 수도 여러 개인 경우가 많다.

 

 

이 경우 parameter 개수를 계산하는 법을 설명하겠다.

 

 


 

 

https://d2l.ai/chapter_convolutional-neural-networks/channels.html

 

 

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}$

 

 


 

torchsummaryparameters() 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())

반응형