본문 바로가기
고려사이버대학교/Keras

[케라스 3주차] 숫자손글씨 이미지 직접 분류하기

by 꿈돌이. 2022. 3. 21.

케라스 딥러닝 3주차 과제로 '인공지능 경진대회(AI팩토리)'에서 주최한 문제를 직접 풀고, 제출까지 완료하는 것이다. 이 문제의 학습목표는 숫자손글씨 데이터셋에 대해 이해하고, 인공지능 모델을 학습시켜 직접 문제를 풀어보는 것이다.

 

  • 숫자손글씨 직접 분류해보기 [참여]

문제 정의

0~9까지 숫자 손글씨 이미지를 보고, 해당하는 숫자를 맞춘다.

(맞춘다는 표현은 분류한다는 의미와 같다)

 

실습

먼저 필요한 패지키와 숫자 손글씨 이미지 데이터셋인 MNIST를 불러온다.

 

MNIST 데이터셋

from tensorflow import keras   #패키지 가져오기
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()   #keras에서 제공하는 데이터셋인 mnist를 가져온다.

데이터셋 형태를 살펴보면, 크게 훈련셋(x_train, y_train), 실험셋(x_test, y_test)으로 구분된다.

 

print(x_train.shape)
print(y_train.shape)
print(x_test.shape)
print(y_test.shape)

(60000, 28, 28)  #샘플수, 가로픽셀, 세로픽셀
(60000,)
(10000, 28, 28)
(10000,)

훈련셋과 실험셋을 출력해보면 다음과 같은 결과를 확인할 수 있다. 첫번째 값 60000은 샘플 수가 6만개라는 뜻이고, 두번째와 세번째 값은 각각 가로, 세로 크기(픽셀)를 의미한다.

 

샘플 하나를 출력해보자.

print(x_test[0])

 

  • 0~255까지 숫자(8비트)로 구성
  • 가로 28개, 세로 28개로 표현 (28x28 픽셀)
  • 0은 검정색, 255는 흰색
  • 색상을 표현할 때, '채널'이라고 한다.

 

문제를 푸는 대상은 훈련셋이 아닌, 시험셋이다. 시험셋을 중점적으로 살펴보자.

import matplotlib.pyplot as plt   #이미지를 불러오기 위해 plt라이브러리 사용

for i in range(0, 10):   #0~9까지 10번 반복
	plt.imshow(x_test[i])
	plt.show()

plt라이브러리를 사용하여, 손글씨를 이미지 형태로 확인할 수 있다. 여기서 흑백 이미지로 표시하고 싶다면 아래과 같이 cmap을 gray로 나타내주면 된다.

 

for i in range(0, 10):
	plt.imshow(x_test[i], cmap='gray')   #흑백으로 표시
	plt.show()

위와 같이 컬러 이미지가 흑백 이미지로 나타난다.

 

import numpy as np   #패키지 가져오기
y_pred = [7, 2, 1, 0, 4, 1, 4, 9, 5, 9]   #y라벨 값을 배열로 지정 (pred = prediction 약자)
np.savetxt('y_pred.csv', y_pred, fmt='%d')   #csv확장자를 가진 파일로 저장

마지막으로 샘플 데이터 이미지 10개를 보고, 각 샘플에 대한 라벨 값을 기록한다. 라벨 값은 0~9까지 숫자를 예측하여 총 10개를 기록한다. 기록한 배열을 csv 확장자 파일로 저장한다.

 

  • savetxt : 텍스트 파일로 저장
  • fmt='%d' : 포맷을 정수 형태로 저장 (fmt는 fomat의 약자)

코드를 실행해본 결과, 위 사진과 같이 'y_pred.csv'라는 파일이 생성되었다. 파일을 열면 라벨 값을 확인할 수 있다. 이 파일을 다운로드 받아서 제출하면 되는데, 예측한 값과 실제 값의 숫자가 일치하면 점수가 부여된다.

 

 

댓글