본문 바로가기
Python/머신러닝, 딥러닝

[Tensorflow] Keras를 통한 딥러닝 (ANN - 인공신경망)

by IT두잇 2022. 5. 13.

이번에는 mnist data를 활용해보려고 합니다 :)

mnist는 숫자 0부터 9까지의 이미지로 구성된 손글씨 데이터 셋입니다.

 

 

 

Tensorflow를 설치하고 데이터 정규화를 위해 MinMaxScaler를 import 합니다.

import tensorflow as tf
from sklearn.preprocessing import StandardScaler, MinMaxScaler

 

mnist 데이터 셋을 불러옵니다.

mnist = tf.keras.datasets.mnist

 

 

train과 test 데이터 셋 분리

(x_train, y_train), (x_test, y_test) = mnist.load_data()

 

정규화

: 정규화는 모델의 정확도를 높이기 위해 필요한 작업입니다. 

- 최댓값으로 나누기 - ex) x_train/255, x_test/255 (여기서 255는 mnist 픽셀의 최댓값)

- MinMaxScaler을 통해  0-1 값으로 반환하여 기계가 학습할 수 있도록 만들어줍니다.

scaler = MinMaxScaler()
scaler.fit(x_train)
x_train_s = scaler.transform(x_train)

 

 

모델 생성 

: 신경망 파트를 만들어줍니다.

 

*Flatten -  2차원 배열을 1차원 배열로 바꾸어줍니다.

*activation - 'sigmoid': 정답 여부 한가지만 확인할 때, 'softmax': 여러 값 확인할 때 

model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(28,28)), #레이어 생성 28*28개 데이터 생성    
    tf.keras.layers.Dense(512, activation = 'relu'), # 512개의 신경망으로 이루어짐
    tf.keras.layers.Dense(10, activation = 'softmax') #output 생성, 10개, softmax라는 활성함수
])

 

모델 컴파일

model.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy', metrics = ['accuracy'])

 

모델 피팅

*validation split: 몇프로가지고 트레이닝할지 설정

model.fit(x_train, y_train, epochs = 10, validation_split = 0.2)

 

모델 피팅을 진행하면 아래와 같이 설정한 epochs 수 만큼 피팅이 진행되는 것을 확인할 수 있습니다. 

 

학습한 모델 저장

model.save('model.h5')

 

! 데이터를 정규화 한 데이터와 하지 않은 데이터를 비교했을 때,

정규화 했을 때 정확도가 더 상승하는 것을 확인할 수 있었습니다.