일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- rnn
- 정보처리기사실기
- 디버깅
- 중학1-1
- 연습문제
- 혼공머신
- JDBC
- 순환신경망
- 딥러닝
- 중학수학
- html/css
- ChatGPT
- 자바 실습
- SQL
- 자바
- 정보처리기사필기
- 데이터베이스
- 상속
- JSP/Servlet
- 자바스크립트
- 컴퓨터비전
- 파이썬
- c언어
- 데이터분석
- 컴퓨터구조
- 개발일기
- 자바스크립트심화
- JSP
- CSS
- 머신러닝
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
이미지를 위한 인공 신경망 4 - 합성곱 신경망을 사용한 이미지 분류 2 : 모델 컴파일과 훈련 본문
이어서 합성곱 신경망을 사용한 이미지 분류 학습을 진행해 보겠다.
모델 컴파일과 훈련
케라스 API의 장점은 딥러닝 모델의 종류나 구성 방식에 상관없이 컴파일과 훈련 과정이 같다는 점이다. 다음 코드는 완전 연결 신명망을 컴파일하고 훈련하는 코드와 거의 같다.
Adam 옵티마이저를 사용하고 ModelCheckpoint 콜백과 EarlyStopping 콜백을 함께 사용해 조기 종료 기법을 구현한다.
얼핏 보아도 훈련 세트의 정확도가 이전보다 훨씬 좋아진 것을 알 수 있다. 손실 그래프를 그려서 조기 종료가 잘 이루어졌는지 확인해 보겠다.
검증 세트에 대한 손실이 점차 감소하다가 정체되기 시작하고 훈련 세트에 대한 손실은 점점 더 낮아지고 있다. 이 그래프를 기반으로 아홉 번째 에포크를 최적으로 생각할 수 있다.
EarlyStopping 클래스에서 restore_best_weights 매개변수를 True로 지정했으므로 현재 model 객체가 최적의 모델 파라미터로 복원되어 있다. 즉 ModelCheckpoint 콜백이 저장한 파일을 다시 읽을 필요가 없다.
이번에는 세트에 대한 성능을 평가해 보겠다.
이 결과는 fit() 메서드의 출력 중 아홉 번째 에포크의 출력과 동일하다. EarlyStopping 콜백이 model 객체를 최상의 모델 파라미터로 잘 복원했다.
predict() 메서드를 사용해 훈련된 모델을 새로운 데이터로 예측해 보겠다. 여기서는 편의상 검증 세트의 첫 번째 샘플을 처음 본 이미지라고 가정한다.
모델이 이 이미지에 대해 어떤 예측을 만드는지 확인해 보겠다. predict() 메서드는 10개의 클래스에 대한 예측 확률을 출력한다.
결과를 보면 아홉 번째 값은 1이고 다른 값은 거의 0에 가깝다. 다시 말해 아홉 번째 클래스라고 강하게 주장하는 것이다. 이를 막대 그래프로 그리면 확실하게 느낄 수 있다.
아홉번째 클래스가 실제로 무엇인지는 패션 MNIST 데이터셋의 정의를 참고해야 한다. 여기서는 파이썬에서 레이블을 다루기 위해 리스트로 저장하겠다.
preds 배열에서 가장 큰 인덱스를 찾아 classes 리스트의 인덱스로 사용하면 된다. 마지막으로 맨 처음에 떼어 놓았던 테스트 세트로 합성곱 신경망의 일반화 성능을 가늠해 보았다. 즉 이 모델을 실전에 투입했을 때 얻을 수 있는 예상 성능을 추정해 본다.
훈련 세트와 검증 세트에서 했던 것처럼 픽셀값의 범위를 0~1 사이로 바꾸고 이미지를 (28, 28)에서 (28, 28, 1)로 바꾸겠다.
예상대로 테스트 세트에서의 점수는 검증 세트보다 조금 더 낮다.
단원 마무리하기
1번에서 strieds는 필터의 가로세로 이동 간격을 지정한다. kernel_size는 필터의 가중치 가로세로 크기를, padding은 합성곱 층의 패딩 타입을, activation은 합성곱 출력에 적용할 활성화 함수를 지정한다.
2번에서 valid 패딩은 입력에 패딩을 추가하지 않는다.
3번에서 MaxPooling2D의 풀링 크기는 2개의 정수 (너비와 높이)로 구성해야 한다. 풀링의 크기는 가로세로 크기가 같을 경우 하나의 정수로 지정할 수 있다. 풀링의 크기는 2개의 정수로 지정할 수 있으므로 2번도 답이 된다. MaxPooling2D의 첫 번째 매개변수는 풀링의 크기이고, 두 번째 매개변수는 스트라이드 크기이다. 따라서 답은 4번이다.
학습을 마치고
오늘은 공부가 많이 하기 싫은 날인 것 같다. 집중도 잘 되지 않지만 그래도 그렇게 학습을 조금씩이라도 이어가고 있는 것이 신기할 따름이다. 이제 3번째 단원만 학습을 마치면 다음 단계로 나아갈 수 있을 것이다.
'인공지능 > 딥러닝' 카테고리의 다른 글
이미지를 위한 인공 신경망 6 - 합성곱 신경망의 시각화 2 : 함수형 API 및 특성 맵 시각화 (0) | 2024.10.27 |
---|---|
이미지를 위한 인공 신경망 5 - 합성곱 신경망의 시각화 1 : 가중치 시각화 (0) | 2024.10.27 |
이미지를 위한 인공 신경망 3 - 합성공 신경망을 사용한 이미지 분류 1 : 합성곱 신경망 만들기 (0) | 2024.10.27 |
이미지를 위한 인공 신경망 2 - 합성곱 신경망의 구성 요소 2 : 케라스 합성곱 층 및 합성곱 신경망의 전체 구조 (1) | 2024.10.27 |
이미지를 위한 인공 신경망 1 - 합성곱 신경망의 구성 요소 1 : 합성곱에 대하여 (0) | 2024.10.27 |