Wiki에 따르면 National Institute of Standards and Technology의 줄임말이고,
NIST(Institute of Standards and Technology, 미국 국립표준기술연구소)의 손으로 쓴 글자 데이터셋에서 숫자만 따로 뽑아낸 데이터셋입니다.
0부터 255 사이의 값을 가지는 흑백 이미지, 28x28 사이즈, 7만 개 이미지(6만 개 트레이닝 셋, 1만 개 테스트 셋)로 구성되어있습니다. (데이터 소스마다 차이가 조금 있어요.)
1. 구하기 쉽습니다.
https://toolbox.google.com/datasetsearch/search?query=mnist 데이터셋을 받을 곳도 많고
이미지 형태부터 csv 형태까지 편하게 고를 수 있습니다.
# tensorflow
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets()
# keras
import keras
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
머신에 파일을 다운로드하여두는 수고도 필요 없이 평소 쓰는 패키지에서 두세 줄로 가져와 사용할 수 있습니다.
2. 모델의 성능을 확인하기 쉽습니다.
뉴럴넷 모델들이 feature importance를 알려주지 않아 예측 결과와 feature 사이의 거리를 파악하기 힘들고 이해하기에도 힘든 반면, MNIST 데이터셋으로 예측한 결과는 눈으로 확인하고 좋은지 나쁜지, 혹은 얼마나 좋은지를 파악하기가 용이합니다.
성능이 좋은 모델인지 아닌지는 그저 눈으로 확인한 test image가 읽기 쉬운 숫자인지 아닌지를 판단해보면 알 수 있기 때문입니다.
3. 좋은 성능이 쉽게 나옵니다.
간단한 모델 구성으로도 비교적 좋은 성능이 나오는 데다가 모델 구성별로 대략의 baseline 성능도 알려져 있기 때문에 그래프가 정상으로 작성되었는지, 하이퍼 파라미터는 적당했는지, 쉽게 판단이 가능합니다.
각 모델별로 성능은 ↓ 요 정도라고 합니다.
- Linear Classifier : 92.4%
- Neural Network(2 layer) : 98.4%
- Neural Network(6 layer) : 99.65%
- Convolution Neural Network(6 layer) : 99.79%
tensorflow와 keras에서가져온 데이터가 서로 다르게 생겼어요.
feature의 shape이 다른점((28, 28), (784))과 label의 onehot encoding 적용 여부, 5천개 이미지 정도 차이가 나는 점 정도가 다르나 아주 간단한 전처리 수준을 거치면 똑같은 형태로 만들 수 있습니다.
기본적으로 같은 데이터셋으로 보아도 괜찮겠습니다.
잘 정리된 데이터가 마음에 들지 않는다면 직접 그려볼 수도 있겠죠.
notebook에서 손으로 직접 숫자를 그리는 방법을 참조하세요.
MNIST와 유사하되 조금 더 실제 데이터에 근접하는 데이터셋들도 있을텐데요.
제법 다양한 데이터들이 MNIST와 같이 손 닿는 곳에 많이 널려있네요.
What is the class of this image? 참조했습니다.
자 그럼, 전처리의 고통은 뒤로하고
깔끔하고 자신있게, 맑고 깨끗한 MNIST 사용해서 코드짜는 연습해보겠습니다.
끝.