728x90
반응형
Deep Learning MNIST Example
# 데이터 불러오기
import tensorflow as tf
import numpy as np
from tensorflow.keras.datasets import mnist
(x_train, t_train), (x_test, t_test) = mnist.load_data()
print('\ntrain shape = ', x_train.shape, ', Train label shape = ', t_train.shape)
print('\ntest shape = ', t_train.shape,', test label shape = ', t_train.shape)
print('\ntrin label = ', t_train) # 학습 데이터 정답 출력
print('\ntest label = ', t_test) # 테스트 데이터 정답 출력
# 데이터 확인
import matplotlib.pyplot as plt
plt.figure(figsize=(6,6))
for index in range(25): # 25개 이미지 출력
plt.subplt(5, 5, index+1)
plt.imshow(x_train[index], cmap='gray')
plt.axis('off')
plt.title(str(t_train[index])
plt.show()
# 데이터 전처리
x_train = (x_train-0.0)/(255.0-0.0) # 학습데이터 정규화
x_text = (x_text-0.0)/(255.0-0.0) # 테스트 데이터 정규화, 최대값 255, 최소값 0.0
t_train = tf.keras.utils.to_categorical(t_train, num_classes = 10) # 정답 데이터 원핫 인코딩
t_test = tf.keras.utils.to_categorical(t_test, num_classes = 10) # MNIST 정답 데이터는 0~9까지 총 10개의 숫자 가운데 하나이므로 num_classes = 10을 지정하여 10개의 리스트를 만들어서 원핫인코딩 수행
# 모델 구축
model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape = (28, 28)) # 입력층
model.add(tf.keras.layers.Dense(100, activation = 'relu')) # 은닉층
model.add(tf.keras.layers.Dense(10, activation = 'softmax')) # 출력층
# 모델 컴파일
model.complie(optimizer = tf.keras.optimizers.Adam(learning_rate = 1e-3), loss = 'categorical_crossentropy', metrics = ['accuracy'] # 원핫인코딩방식
model.summary()
# 모델 학습
hist = model.fit(x_train, t_train, epochs = 30, validation_split = 0.3)
# 모델 (정확도) 평가
model.evaluate(x_test, t_test)
# 손실 및 정확도 시각화
plt.title('Loss')
plt.xlabel('epochs')
plt.ylabel('loss')
plt.grid()
plt.plot(hist.history['loss'], label='train loss')
plt.plt(hist.history['val_loss'], label = 'validation loss')
plt.legend(loc='best')
plt.show()
plt.title('Accuracy')
plt.xlabel('epochs')
plt.ylabel('accuracy')
plt.grid()
plt.plot(hist.history['accuracy'], label = 'train accuracy')
plt.plot(hist.history['val_accuracy'], label='validation accuracy')
plt.show()
# 혼동 행렬
from sklearn.metrics import confusion_matrix
import seaborn as sns
plt.figure(figsize = (6,6))
predicted_value = model.predict(x_test) # 테스트 입력 데이터에 대한 prediction 실행
cm = confusion_matrix(np.argmax(t_test, axis = -1), np.argmax(predicted_value, axis=-1) # 정답과 예측 답 비교
sns.heatmap(cm, annot=True, fmt='d')
plt.show()
print(cm)
print('\n')
for i in range(10):
print(('label = %d\t(%d%d)\taccuracy = %.3f')%(i, np.max(cm[i]), np.sum(cm[i]), np.max(cm[i])/np.sum(cm[i])))
반응형
'머신러닝공부' 카테고리의 다른 글
CNN-Convolution Neural Network (합성곱 신경망)간단 정리 (0) | 2022.12.27 |
---|---|
Fashion MNIST 딥러닝 스크립트 예제 (0) | 2022.12.26 |
MNIST를 활용한 이미지 데이터 딥러닝 개발 프로세스 (0) | 2022.12.25 |
이항 분류 Binary Classification 딥러닝 예제 (0) | 2022.12.25 |
Logistic Regression / DeepLearning 간단 비교 (0) | 2022.12.25 |