MNIST 손글씨 딥러닝 예제를 통한 신경망 구조 설명
1. 훈련/테스트 세트 구성
>>> import tensorflow as tf
>>> from kerase.datasets import mnist
>>> mnist = tf.keras.datasets.mnist
>>> (x_train, y_train), (x_test, y_test) = mnist.load_data() # train / test set을 알아서 나눔
# mnist 데이터는 0~255 범위의 데이터
# 이를 0~1 사이로 맞춰주기 위해서 255로 나눔.
# 딥러닝은 0~1 사이로 input 데이터의 범위를 해줘야.
>>> x_train, x_test = x_train / 255.0, x_test / 255.0
>>> x_train.shape
2. 모델 구성
Layer(층):
데이터 처리 필터
어떤 데이터가 들어가면 더 유용한 형태로 출력됨.
즉, 주어진 문제에 더 의미 있는 표현을 입력 데이터로 부터 추출함
여러 층을 통과하면서 점진적으로 데이터를 정제함.
데이터 정체 필터(층)가 연속되어 있는 데이터 프로세싱을 위한 여과기 같다고 생각할 수 있음.
>>> model = tf.keras.models.Sequential([
... tf.keras.layers.Reshape((28, 28, 1)),
... tf.keras.layers.Conv2D(16, 3, activation='relu'),
... tf.keras.layers.Flatten(),
... tf.keras.layers.Dense(128),
... tf.keras.layers.Dense(10, activation='softmax')
... ])
3. 컴파일 (compile)
손실함수 (loss function):
신경망의 성능을 측정하는 방법
모델(네트워크)이 옳은 방향으로 학습될 수 있도록 해줌.
옵티마이저(optimizer):
입력 데이터와 손실 함수를 기반으로 네트워크를 업데이트하는 메커니즘
모니터링 지표
정확도 등
>>> model.compile(optimizer='adam',
... loss='sparse_categorical_crossentropy',
... metrics=['accuracy'])
4. 학습
>>> model.fit(x_train, y_train, epochs=5)
5. 모델 평가
>>> test_loss, test_acc = model.evaluate(x_test, y_test)
>>> print('테스트 정확도:', test_acc)