저번시간엔 CNN이 무엇인지 개략적으로 살펴보는 시간을 가졌었다.
이번 시간에는 CNN에서 합성곱을 하는 층인 Convolution Layer에 대해 알아보도록 하겠다.
우리는 CNN의 Convolution Layer을 만들기 위해서는 일일이 합성곱을 해주는 함수를 직접 만들어야 하는가??
그렇지 않다. 각종 신경망이나 딥러닝 등에 자주 사용되는 도구들을 모아놓은 Keras 모델을 사용하면 된다.
그렇다면 이러한 모델을 어떻게 이용해서 합성곱 층을 사용하는가??
먼저,
from tensorflow.keras.layers import Conv2D
을 통해서 Conv2D를 import 해준 뒤에
Sequential Model로 간단한 신경망 모델을 만들어주고
다음과 같은 방법으로 모델에 레이어를 추가함으로써 layer을 사용가능하다.
from tensorflow.keras.models import Sequential
model = Sequential()
model.add(Conv2D(1,(3,3)))
#Conv2D(filters,kernel_size)
keras에서 제공해 주는 Convolution Layer에는 Conv1D, Conv2D, 등등 여러 layer가 있으나
오늘은 CNN에서 주로 많이 사용되는 Conv2D에 대해서만 알아보도록 하겠다.
Conv2D
Conv2D에 관해 살펴보자면, 여러 가지 파라미터들을 넣을 수 있는데, 대개로 많이 쓰는 파라미터로는
filters, kernel_size, strides, padding, activation 등이 있다.
filters : 정수값이며 몇 개의 필터를 사용할지 결정한다. (이에 따라 출력의 채널 개수가 달라짐, 예를 들어 필터의 값으로 2를 지정해 주면 출력으로 2 채널의 Feature Map이 나온다.)
kernel_size : 필터(커널)의 크기를 설정하는 파라미터이다. (3,3)이나 (2,2) 등 튜플로 지정이 가능하다.
strides : 필터의 움직이는 보폭을 결정하는 정수 값이다.
padding : "valid" 또는 "same"(대소문자 구분 안 함)으로 지정가능하다.
"valid"는 패딩이 없음을 의미하며 "same"은 입력의 왼쪽/오른쪽 또는 위/아래에 균일하게 0으로 패딩을 해준다는 것을 의미한다.
groups : 입력이 채널축에 따라 분할되는 그룹 수를 지정하는 정수값이다.
각 그룹은 filters / groups개의 필터로 개별적으로 수행된다. 각 그룹은 입력의 채널 수/groups개의 채널을 가진다.
(단, filter의 개수와 입력의 채널수는 groups으로 나누어 떨어져야 한다.)
ex) 입력의 채널이 6이고 groups가 2, filter이 4이면 그룹은 3(=6/2) 개의 채널로 이루어진 두 개의 그룹이 생기며
각 그룹은 2(=4/2) 개의 필터로 합성곱이 행해진다.
activation : 사용할 활성화 함수를 지정해 준다. 아무것도 지정하지 않으면 활성화가 적용되지 않는다.
(relu, tanh, sigmoid 등등이 있다.)
use_bias : 바이어스 벡터를 사용하는지 여부를 나타내는 참/거짓 값이다.
정도가 있다.
+Strides
저번 시간에는 다루지 않았던 strides에 대해 간략하게 다루어보자면,
stride는 필터가 이동하는 보폭의 단위라고 생각하면 된다.
stride가 1인경우 다음과 같이 한 칸씩 움직이지만
stride가 2인경우 아래와 같이 2칸씩 움직임을 알 수 있다.
또한 필터의 크기, 이미지의 크기, 그리고 stride를 통해서 feature map의 크기 또한 계산이 가능한데,
이미지의 크기를 NxN, 필터의 크기를 FxF, stride의 값을 S라고 하였을 때,
feature map의 크기는 ((N-F)/S)+1 x ((N-F)/S)+1 임을 알 수 있다.
해당 공식이 실제로 적용되는지 확인하기 위해 위 사례들에 대입해 보면,
위의 stride가 1인 사례는 5x5의 이미지, 3x3의 필터, stride가 1이므로 3(=(5-3)/1+1) x 3 크기의 Feature Map이 나오며
stride가 2인 사례는 5x5의 이미지, 3x3의 필터, stride가 2이므로 2(=(5-3)/2+1) x 2 크기의 Feature Map이 나오므로 해당 공식이 성립한다는 것을 확인이 가능하다.
참조
https://keras.io/api/layers/convolution_layers/convolution2d/
Keras documentation: Conv2D layer
Conv2D layer [source] Conv2D class tf.keras.layers.Conv2D( filters, kernel_size, strides=(1, 1), padding="valid", data_format=None, dilation_rate=(1, 1), groups=1, activation=None, use_bias=True, kernel_initializer="glorot_uniform", bias_initializer="zeros
keras.io
'수업내용정리 > 인공지능' 카테고리의 다른 글
[인공지능]활성화 함수의 종류 알아보기 (0) | 2023.01.20 |
---|---|
[Tensorflow][Keras]활성화 함수의 사용법 간단하게 알아보기 (0) | 2023.01.18 |
[Tensorflow][Keras]CNN이란? CNN에 대해 개략적으로 살펴보기 (0) | 2023.01.15 |
[Tensorflow][Keras]인공지능? 머신러닝? 딥러닝? (0) | 2022.12.09 |
[Tensorflow][Keras]Word2Vec 코드로 구현하기 (0) | 2022.11.27 |