CNN은 Convolutional Neural Network의 약자이다. 이는 주로 이미지 인식 및 분류에 사용되는 딥러닝 모델이다. CNN은 이미지의 특징을 자동으로 추출하고 학습하는 데 특화되어 있다.
1.Convolution
Convolution(합성곱)은 두 함수를 결합하여 세 번째 함수를 만드는 연산이다.
간단히 말하면 합성곱은 입력 데이터를 스캔하면서 주어진 패턴을 찾아내거나 데이터를 처리하는 작은 필터이다.
아래의 첫번째 사진은 이어진 선끼리 각 곱연산을 해준 후 전부 합해준 결과 값을 Feature Map 왼쪽 위에 놓여진 것을 볼 수 있다. 두번째 사진또한 각 자리끼리 곱연산 후 결과 값을 Feature Map에 차례대로 놓는다.
2.Pooling
Pooling(풀링)은 합성곱 신경망(Convolutional Neural Network, CNN)에서 사용되는 기법 중 하나로, 입력 데이터를 다운샘플링하여 정보를 압축하는 과정을 말한다.
위사진은 이미지를 처리하는 CNN에서 풀링을 적용할 때, 입력 이미지를 작은 영역(일반적으로 2x2 또는 3x3)으로 나누고, 각 영역에서 가장 큰 값(최대 풀링)을 추출한다. 각 영역에서 가장 큰 값을 선택하여 그 값으로 영역을 대표한다.
FLATTENING 을 하여 평탄화 작업을 해줌으로써 컴퓨터가 읽을 수 있도록 해준다.
그러면 이제 전 이미지 분류를 Convolution과 Pooling을 활용하여 정확도를 높여보려고한다
Keras를 사용하여 CNN(Convolutional Neural Network) 모델을 구축해보자
1번째 합성곱층 추가
model.add( Conv2D(filters=64, kernel_size=(3,3), activation='relu' , input_shape=(28,28,1)) )
- Conv2D: 2차원 합성곱 층을 추가합니다. 이미지 데이터의 경우 2차원이기 때문에 Conv2D를 사용
- filters=64: 64개의 필터를 사용하여 합성곱을 수행한다. 이는 층이 64개의 다른 특징을 학습할 수 있다는 것을 의미한다
- kernel_size=(3,3): 각 필터의 크기를 지정한다. 여기서는 3x3 크기의 필터를 사용한다. 이 필터는 입력 이미지를 스캔하여 특징을 추출한다.
- activation='relu': 활성화 함수로 ReLU(Rectified Linear Unit)를 사용한다. ReLU는 음수 입력을 0으로 만들어 신경망의 비선형성을 도입한다.
- input_shape=(28,28,1): 입력 이미지의 형태를 지정한다. 여기서는 28x28 크기의 흑백 이미지이므로 (28,28,1) 형태로 지정한다.
1번째 최대 폴링층 추가
model.add( MaxPooling2D(pool_size=(2, 2) , strides=2 ) )
- MaxPooling2D: 최대 풀링 층을 추가한다. 최대 풀링은 입력 영역에서 최댓값을 추출하여 다음 층으로 전달한다. 이를 통해 공간 차원을 줄이고 계산량을 감소시킨다.
- pool_size=(2, 2): 풀링 창의 크기를 지정한다. 여기서는 2x2 크기의 풀링 창을 사용한다.
- strides=2: 풀링 창이 이동하는 간격을 지정한다. 여기서는 2로 설정하여 풀링 창을 2칸씩 이동시킨다.
2번째 합성곱과 폴링층도 추가 되었으며 1번째와 코드가 비슷하다
빌드모델을 하고 함수의 전체적인 모델을 보고 얼리 스탑을 설정 한 후 모델에 학습시키면서 validation을 통해 테스트를 해보았다
전에 CNN을 사용하기 전에는 확률이 88%가 나왔었는데 더 올랐는지 확인해보려고 한다.
val_accuracy를 확인해보면 91~92%로 확률이 상승된 것을 볼 수 있다.
'Deep Learning' 카테고리의 다른 글
[Deep Learning]딥러닝 ANN으로 이미지API(텐서플로우) 활용하여 이미지 분류하기 (1) | 2024.04.18 |
---|---|
[Deep Learning]딥러닝의 Neural Networks and Deep Learning 흐름 (0) | 2024.04.16 |