안녕하세요
cnn으로 mnist 데이터셋을 학습시켜 봅시다.
mnist 데이터셋이 무엇인지이는 아래 포스팅을 참고해주세요
https://ruminz.tistory.com/282 (이미지 딥러닝 기초 mnist 써보기)
CNN
cnn은 컨볼루션 신경망의 약자로써 입력된 이미지에서 다시 한번 특징을 추출하기 위해 커널을 도입하는 기법입니다.
예를들어 이미지가
위와 같이 이루어져 있다고 해봅시다. 여기서 2X2 커널을 준비합시다. 각 칸에는 가중치가 들어가 있씁니다. 가중치를 각각 X1,X0이라고 하겠습니다.
커널을 적용시키면 다음과 같습니다.
왼쪽 위칸부터 차례대로 적용시킵니다. 각 값의 가중치를 곱합니다. 그리고 합을 해줍니다. 그러면 다음과 같습니다.
(1X1) + (0X0) + (0X0) + (1X1) = 2
이 커널을 한칸씩 옮겨 모두 적용해 보겠습니다.
왼쪽위칸부터 오른쪽으로 한칸씩 옮기면서 커널을 적용했습니다. 4 x 4 이미지에 2 x 2커널을 한칸씩 적용하면 위와 같은 그림이 됩니다. 결과를 정리하면 다음과 같습니다.
이 결과를 컨볼루션층 이라고 합니다. 커널을 여러개 만들경우 이와 같은 층이 여러개 만들어집니다.
케라스에서 컨볼루션 층을 추가하는 함수는 Conv2D() 입니다.
model.add(Conv2D(32, kernel_size=(3,3),input_shape=(28,28,1),activation='relu')
첫번째 32는 커널의 갯수입니다. kernel_size는 커널의 크기입니다. 그림에서는 2x2를 썻지만 (3,3)을 쓰면 3x3 커널이 됩니다. input_shape는 층에 입력되는 값입니다. (행,열,색상 또는 흑백) 형식으로 정합니다.
'Coding > AI' 카테고리의 다른 글
자연어 처리1 - 문장의 토큰화 (0) | 2023.10.29 |
---|---|
CNN 맥스풀링 드롭아웃 플래튼이란 무엇인가 (0) | 2023.10.27 |
mnist로 이미지 학습하고 인식하기 (0) | 2023.10.19 |
이미지 딥러닝 기초 mnist 써보기 (0) | 2023.10.15 |
오차역전파 딥러닝의 시작 (0) | 2023.10.15 |