일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 데이터분석
- JSP/Servlet
- 데이터베이스
- 컴퓨터비전
- 정보처리기사필기
- 혼공머신
- 자바
- C++
- CSS
- 중학수학
- 코딩테스트
- 데이터입출력구현
- 영어공부
- 정수와유리수
- numpy/pandas
- 파이썬
- 정보처리기사실기
- 머신러닝
- 연습문제
- 텍스트마이닝
- 중학1-1
- 자바 실습
- 딥러닝
- 컴퓨터구조
- html/css
- 운영체제
- CNN
- 파이썬라이브러리
- pandas
- SQL
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
합성곱 신경망 2 - 간단한 모델 생성 1 : 데이터 로드 및 전처리와 Sequential API로 모델 생성 및 학습 본문
합성곱 신경망 2 - 간단한 모델 생성 1 : 데이터 로드 및 전처리와 Sequential API로 모델 생성 및 학습
huenuri 2024. 10. 28. 21:12이번에는 케라스 모델을 구성할 때 사용한 mnist 손글씨 데이터셋을 가지고 간단한 구조의 합성곱 신경망 모델을 만들어본다.
데이터 로드 및 전처리
먼저 텐서플로 라이브러리를 불러온다.
데이터셋을 불러오면 훈련 셋과 검증 셋으로 구분해서 튜플 형태로 정리해 준다. 훈련 셋의 개수는 60000개, 검증 셋의 개수는 10000개이다. 가로, 세로 각각 28픽셀인 손글씨 이미지와 손글씨가 나타내는 숫자 레이블(정답)이 매칭되어 있다.
훈련 셋의 첫 번째 (인덱스 0) 이미지를 출력해 본다. 숫자 5에 대한 손글씨 이미지가 보인다.
훈련 셋과 검증 셋의 이미지 픽셀을 나타내는 값의 최소값, 최댓값을 출력한다. 이미지 픽셀이 0~255 범위의 숫자로 구성된 것을 파악할 수 있다.
딥러닝 모델의 안정점인 학습을 위해서 입력 이미지 펙셀픽셀 값을 정규화 변환한다. 이미지 픽셀값을 255로 나누어 주면 0~1 범위로 스케일이 정규화된다.
mnist 데이터셋은 색상을 나타내는 채널이 1개인 모도 컬러 이미지로 구성된다. CNN 모델에 주입하기 위해서 색상을 나타내는 채널을 추가해 준다. 다음 코드는 tf.newaxis 축을 텐서 배열에 직접 추가하는 방식이다. 따라서 마지막에 1이 추가되어 변환된다.
Sequential API로 모델 생성 및 학습
Sequential API를 사용하여 합성곱 레이어 1개, 풀링 레이어 1개를 적용하는 간단한 모델을 만든다. 최종 분류기로 Dense 레이어를 적용하기 위해, Flatten 층을 추가하여 1차원 배열로 펼쳐준다. 합성곱은 Conv2D 레이어를 사용하고 (3, 3) 크기의 서로 다른 32가지 종류의 커널을 적용한다. ReLU 활성화 함수를 적용한다.
풀링 레이어는 (2, 2) 크기로 최대 풀링을 적용하고, 레이어 이름 속성도 추가해 준다. 최종 분류기는 정답 레이블이 0~9까지 10개의 값을 가지므로 노드 개수를 10으로 하고, 분류 클래스가 10개인 다중 분류 문제이므로 활성화 함수로 softmax를 적용한다.
앞서 정의한 모델 구조에 옵티마이저, 손실함수, 평가지표를 성정해주고 컴파일하면 모델 인스턴스가 생성된다. fit() 메서드에 훈련 셋과 검증 셋을 주입하고, epoch를 10으로 지정한다. 코드 셀을 실행하면 모델이 학습하면서 epoch당 손실과 평가 결과를 출력한다. 두 번째 epoch를 마친 상태에서도 훈련 셋과 검증 셋 모두 97%에 가까운 정확도를 보인다.
evolute() 메서드를 모델 인스턴스에 적용하면 모델의 학습된 가중치를 사용하여 손실과 평가지표를 계산해 준다. 검증 셋에 대해서 약 98%의 정확도를 나타낸다.
모델 훈련 단계에서 훈련 결과를 history 객체에 저장해 두었다. 10 epoch 동안 모델의 예측 오차와 정확도를 그래프로 그리는 함수를 정의하고 실행한다. 그래프를 보면 훈련 셋에 대한 손실은 계속 줄어드는데 검증 셋의 손실은 어느 수준에서 낮아지지 않는다. 4 epoch 이후부터는 모델 과대적합으로 진행되었다는 것을 파악할 수 있다.
학습을 마치고
오늘은 많이 피곤하고 졸리기도 하고 분량이 많아서 내일 이어서 모델 학습을 진행해보려고 한다. 조금 전부터 많이 졸렸으나 그래도 여기까지는 학습을 마쳐야 할 것 같았다.
내일을 일찍 일어나서 새벽 공부를 마치고 운동도 하고 내일부터는 진짜 제대로된 운동을 해볼 생각이다.
'인공지능 > 딥러닝' 카테고리의 다른 글
합성곱 신경망 4 - 복잡한 모델 생성 1 : Functional API로 다중 입력, 다중 출력 레이어 생성 및 다중 출력 분류 모델 (0) | 2024.10.29 |
---|---|
합성곱 신경망 3 - 간단한 모델 생성 2 : 모델 구조 파악 (0) | 2024.10.29 |
합성곱 신경망 1 - 합성곱 신경망에 대하여 (2) | 2024.10.28 |
CNN 3 - 개와 고양이를 분류하는 실습 1 : 이미지 파일 분류 (0) | 2024.10.28 |
CNN 2 - 합성곱 신경망 실습해보기 (0) | 2024.10.28 |