본문 바로가기
Make the Learning Curve/Data Science

[CNN] CNN을 이용한 MNIST-1 // MNIST 이해 및 데이터 확인

by 에이도 2020. 12. 18.

1) MNIST 데이터베이스란?

MNIST 데이터베이스 (Modified National Institute of Standards and Technology database)는 손으로 쓴 숫자들로 이루어진 대형 데이터베이스이며, 다양한 화상 처리 시스템을 트레이닝하기 위해 일반적으로 사용된다.

 

이 데이터베이스는 또한 기계 학습 분야의 트레이닝 및 테스트에 널리 사용된다.

NIST의 오리지널 데이터셋의 샘플을 재혼 합하여 만들어졌다.

 

개발자들은 NIST의 트레이닝 데이터셋이 미국의 인구조사국 직원들로부터 취합한 이후로 테스팅 데이터셋이 미국의 중등학교 학생들로부터 취합되는 중에 기계 학습 실험에 딱 적합하지는 않은 것을 느꼈다.

 

게다가 NIST의 흑백 그림들은 28x28 픽셀의 바운딩 박스와 앤티 엘리어싱 처리되어 그레이 스케일 레벨이 들어가 있도록 평준화되었다.

 

(출처 :ko.wikipedia.org/wiki/MNIST_%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4 )

 


MNIST 테스트 데이터셋의 샘플 이미지.

 


MNIST 데이터베이스는 60,000개의 트레이닝 이미지와 10,000개의 테스트 이미지를 포함한다.

트레이닝 세트의 절반과 테스트 세트의 절반은 NIST의 트레이닝 데이터셋에서 취합하였으며,

그 밖의 트레이닝 세트의 절반과 테스트 세트의 절반은 NIST의 테스트 데이터셋으로부터 취합되었다.

 

 


MNIST의 데이터를 읽고 필기체의 숫자를 인식하는 프로그램 만들기.

 

  • 이미지에 대한 지식이 없어도

  • CNN, 딥러닝의 지식이 있으면 tensorflow-Keras를 이용하여 만들 수 있음!

 

이처럼 MNIST는 숫자로 쓴 데이터 베이스입니다. 이를 CNN을 통해 학습시키고 예측을 해보겠습니다!

 

참고)

MNIST 데이터는 Keras내에서 제공이 되므로

따로 이미지 데이터가 필요하지 않습니다.

함수를써서 바로 이용하면 됩니다! 

 

 


1. 모듈 불러오기

import numpy as np
import matplotlib.pyplot as plt

from tensorflow.keras.models import Sequential, load_model
from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D, Dense, Flatten
from keras.utils import to_categorical
from keras.datasets import mnist

 

 


2. MNIST데이터를 불러와서  MNIST데이터가 어떤 구조인지 확인

 

(X_train, y_train), (X_test, y_test) = mnist.load_data()
print(X_train, '\n','--'*2,'\n' ,y_train[2])

 

 

한눈에 보기 어렵죠..? shape를 통해 다시 확인해 보면,

 

print('X_train shape = ',X_train.shape)
print('y_train shape = ',y_train.shape)


[out]
X_train shape = (60000, 28, 28)
y_train shape = (60000,) 

 

이처럼 MNIST는 6만 개의 데이터로 저장되어있습니다.

X_train : 28x28 사이즈의 6만 개의 이미지가 있습니다.
y_train :  X데이터의 이미지 숫자(0~9) 다시 말해서 라벨링이 된 6만개의 데이터가 있습니다.

 


3.  test 데이터 확인

print('X_test shape = ',X_test.shape)
print('y_test shape = ',y_test.shape)

[out]
X_test shape =  (10000, 28, 28)
y_test shape =  (10000,)

 

X_test는 28x28 사이즈의 10,000개의 이미지가 있습니다.
y_test는 X데이터의 이미지 숫자(0~9)만 개가 있습니다.

 

train데이터의 정보와 동일하고, 개수만 다른 걸 확인할 수 있습니다.

 

 


4.  X_train의 데이터를 이미지로 표현

이미지로 표현하기 위해서는 plt를 사용합니다!

컬러 이미지를 사용하려면 (cmap='gray')를 제거해주세요!

plt.imshow(X_train[0],cmap='gray')
print('이 이미지의 값은', y_train[0],'입니다.')

 

이를 통해 X의 데이터와 y의 데이터가 어떻게 되어있는지 확인하였습니다.

 

이제 X의 데이터의 이미지가 실제 값인 y의 값으로 인식이 되도록 해야 하는 데이터임을 알 수 있습니다.

 

 


5. 여기까지 MNIST의 데이터를 확인하는 작업이었습니다!

def Check_MNIST_data():
    (X_train, y_train), (X_test, y_test) = mnist.load_data()
 
    print(X_train, '\n','--'*2,'\n' ,y_train)
    print(X_train[0])  # 이미지데이터
    print(y_train[0])  # 이미지의 숫자
    print('X_train shape = ',X_train.shape)
    print('y_train shape = ',y_train.shape)
    print('X_test shape = ',X_test.shape)
    print('y_test shape = ',y_test.shape)
    plt.imshow(X_train[0],cmap='gray')
    print('이 이미지의 값은', y_train[0],'입니다.')
    

데이터를 로딩하고 

데이터의 이미지 개수, 사이즈, array, 라벨링을 확인했습니다.

 

 

다음 포스팅부터 다시 본격적으로 시작해 볼까요?


 

 

 

 

 

댓글