인공지능 연구의 권위자 LeCun 교수가 만든, 손으로 쓴 숫자로 구성된 대규모 데이터베이스인데, 처음 코딩 입문할 때 hello world 예제와 같은 느낌이에요!
MNIST는 총 60,000개의 트레이닝 데이터와 10,000개의 테스트 데이터로 구성되어 있으며,
특징으로는 28x28 크기의 흑백 이미지로 구성된 데이터셋이며, 딥러닝 모델의 분류 문제를 연습하기에 최적화된 데이터입니다!
import tensorflow as tf
import keras
from keras.datasets import mnist
(tr_x, tr_y), (tt_x, tt_y) = mnist.load_data()
import matplotlib.pyplot as plt
plt.imshow(tr_x[0])
* 컬러로 나오는 이유는 imshow는 기본적으로 데이터에 색상을 매핑하는 **컬러맵(colormap)**을 사용하기 때문에, plt.imshow(tr_x[0], cmap='gray') 으로 하면 흑백으로 결과가 출력됩니다,


1. tr_x.shape을 통해 28x28 크기의 이미지 60,000개를 알 수 있음
2. tr_y[0]: 라벨 값은 0~9의 정수 중 하나. (첫 번째 이미지 → 5)
3. 28*28 = 784: 이미지를 평탄화(flatten)하여 1차원으로 변환 시 사용 -> 이유: 이미지는 28x28 형태로 제공되지만, 신경망에 입력하기 위해 1차원 배열로 변환한다!
다음은 Keras를 사용해 MNIST 데이터셋에 대해 간단한 신경망 모델을 구축, 학습, 평가하는 실습 코드를 리뷰하고 정리해볼게요!
from keras.datasets import mnist
(tr_x, tr_y), (tt_x, tt_y) = mnist.load_data()
s_tr_x = tr_x.reshape(-1, 784) # 입력 이미지를 28x28에서 784(1차원 벡터)로 변환
s_tt_x = tt_x.reshape(-1, 784)
데이터셋 로드: MNIST 데이터셋을 학습용(tr_x, tr_y)과 테스트용(tt_x, tt_y)으로 불러옵니다
데이터 형태 변환: 입력 데이터를 (28x28) 형태에서 (784,)의 1차원 벡터로 변환하여 신경망에 입력 가능하게 만듭니다
from keras import Sequential
from keras.layers import Dense
m = Sequential()
m.add(Dense(100, input_shape=(784,), activation='sigmoid'))
m.add(Dense(10, activation='softmax'))
m.summary()

from keras.losses import sparse_categorical_crossentropy
from keras.optimizers import SGD
m.compile(optimizer='sgd', loss='sparse_categorical_crossentropy', metrics=['acc'])
m.fit(s_tr_x, tr_y, epochs=10)

m.evaluate(s_tt_x, tt_y)

MNIST 데이터셋 로드 및 전처리
신경망 모델 구성
sigmoid 활성화 함수).softmax 활성화 함수).모델 컴파일
SGD 옵티마이저와 sparse_categorical_crossentropy 손실 함수 사용.모델 학습 및 평가