MNIST는 ‘Modified National Institute of Standards and Technology’의 약자로, 미국의 표준 기술 연구소에서 생성된 원래의 NIST 데이터셋을 수정하여 만들었습니다. 이 데이터셋은 손으로 쓴 숫자들의 이미지를 포함하고 있습니다. 이 데이터셋은 기계 학습 분야의 연구에 널리 사용되며, 특히 이미지 처리를 위한 벤치마크로 사용됩니다.
MNIST 데이터 셋
MNIST 데이터셋은 총 7만 개의 이미지로 구성되어 있습니다. 각 이미지는 28×28 픽셀로 이루어져 있고, 숫자 0부터 9까지를 손으로 쓴 글씨를 담고 있습니다. 이 중 6만 개는 훈련 데이터로, 1만 개는 테스트 데이터로 사용됩니다.
MNIST 데이터셋은 약 1990년대에 Yan LeCun, Corinna Cortes, 그리고 Christopher J.C. Burges에 의해 개발되었다고 합니다. 그들이 MNIST 데이터셋을 처음 만들었을 때, 그들의 주요 목표는 기계학습 알고리즘이 얼마나 잘 작동하는지 평가하고, 다양한 알고리즘 간에 성능을 비교하는 표준적인 벤치마크를 제공하는 것이 목적 이었으나 현재는 이 데이터셋을 생성함으로써, 머신러닝의 ‘비지도학습’ 에 해당하는 알고리즘(로지스틱 회귀, 서포트 벡터 머신, 신경망 등) 을 통해서 보다 큰 규모의 데이터셋의 성능 테스트와 훈련이 가능하게 되었습니다.
데이터셋의 크기와 다양성, 그리고 쉽게 접근할 수 있는 특징 덕분에, 우리가 보통 프로그램언어를 처음 배울때 개발하는 ‘Hello, World!’ 프로그램 처럼 MNIST는 머신러닝과 딥러닝 을 배우면서 처음 시도하는 프로그래밍 이라고 생각하면 될듯합니다.
MNIST 데이터셋은 비교적 간단한 구조를 가지고 있지만, 이미지 인식(캡챠, 사물 이미지 인식 등) 분야에서의 다양한 기법을 실험하고 평가하는 데 매우 유용합니다. Keras 라이브러리를 통해 아래 짧은 코드로 간단히 수행해 볼 수 있습니다.
수행 전 tensorflow 와 keras 가 설치가 되어있지 않으면 꼭 설치해야 합니다.
pip install tensorflow keras
from keras.datasets import mnist
# MNIST 데이터셋을 로드합니다.
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
# train_images의 shape를 출력합니다.
print(train_images.shape) # (60000, 28, 28)이 출력됩니다.
# train_labels의 첫 10개를 출력합니다.
print(train_labels[:10]) # [5 0 4 1 9 2 1 3 1 4]와 같이 출력됩