본문 바로가기

머신러닝/혼자 공부하는 머신러닝

21강 합성곱 신경망을 사용한 이미지 분류

이 글은 https://www.youtube.com/watch?v=WuHD9yUuTDk&list=PLJN246lAkhQjoU0C4v8FgtbjOIXxSs_4Q&index=21 보고 공부한 글 입니다.

 

패션 MNIST 데이터 

합성곱 신경망은 2d이미지를 그대로 상용해도 된다.

 

케라스는 3차원 데이터로 입력을 받는다.

 

28*28 이지만 28*28*1로 만들어서 3차원으로 만든다.

 

(48000, 28, 28) 한 train_input을 만들었다.

이것을 255로 나눈다.(이미지 파일 정규화)

 

이렇게 훈련, 검증 세트를 준비한다.

 

첫 번째 합성곱 층 

입력데이터가 3이면 kernel_size=3이다.

 

즉, 3*3*3이 된다.

 

만약 커널 채널이 10이라면 3*3*10으로 된다.

 

(28,28,1) 이 (3,3,1) 필터 32개로 만들어진다.

 

특성맵은 필터 하나의 결과가 차곡 차곡 쌓여서 32개가 된다.

 

채널차원의 개수필터의 개수와 같다.

 

 

 

두 번째 합성곱 층 + 완전 연결 층 

확률 값을 얻어야 되니깐

 

3차원 특성맵을 1열로 펼친다. 3,136개의 뉴런(입력값)이 만들어져진다.

 

flatten층에서 연산을 한다.

입력 배열을 1차원으로 펼치는 역활만 한다.

 

Dense층에서 활성함수 'relu'를 가지는 100개의 뉴런을 두었다.

많은 가중치가 생성될 것이다.

 

10개의 출력층을 softmax를 두었다. 

 

 

모델 요약 

 

 

plot_model()

모델 객체를 집어넣으면 어떻게 각 층이 구성되어있는지 볼 수 있다. 

show_shapes=True 두면 어떻게 입력값이 들어갔는지 알 수 있다.

 

 

컴파일과 훈련 

adam 옵티마이져를 쓴다.

 

정확도를 함깨 출력하려고 metrics='accuracy'를 했다.

 

checkpoint를 best-cnn-model.h5에 저장한다.

 

검증세트가 2 애포크 이상 하지 않도록 조기종료를 하고

가장 낮은 2에포크 이전에 복원하도록 restore_best_weights를 True한다.

 

그래프를 보면 9번째 애포크에서 종료했다.

 

7번째(6)에서 가장낮은 검증점수를 확인했다. 이후에는 검증세트가 높아지기 때문에 과대적합 했다고 볼 수 있다.

 

평가와 예측 

평가를 해보면

 

손실은 0.2

정확도는 92%가 나왔다.

 

1*28*28*1 인 이미지를 predict한다.

 

첫 번째 이미지의 예측한 확률을 출력하면 10개의 확률이 나온다.

9번쨰 원소가 거의 1이다. (가방)

 

 

 

 

테스트 세트 점수 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90