본문 바로가기

딥러닝/인공신경망

tensorflow, keras 실습: mnist 예제

import tensorflow as tf
from tensorflow import keras
from sklearn.datasets import fetch_openml
from tensorflow.keras.utils import to_categorical

mnist = fetch_open('mnist_784', version=1)
X = mnist.data
y_ori = mnist.target

y = to_categorical(y_ori, 10)

tensorflow와 keras를 import 하고, sklearn의 datasets에서 fetch_openml을 불러와서 mnist data를 불러온다. 

X에 mnist.data를, y_ori에 mnist.target을 넣어준다.

mnist는 0부터 9까지의 손글씨를 분류하는 문제로, mnist.target에 0~9까지의 정답이 라벨링 되어있다.

keras에서 분류 모델을 만들 때는 y_ori를 바로 정답으로 넣어주면 안되고, one hot encoding 형태로 넣어주어야 하기 때문에 to_categorical 함수로 [0, 1, 0, 0, ..., 0]과 같이 one hot encoding 된 정답값을 만들어 준다.

X.shape는 (70000, 784)으로, 총 70000장의 손글씨 데이터가 들어있고, 한 장의 사진은 28*28의 픽셀로 이루어져있고, mnist.data는 28*28 = 784개의 픽셀이 한 행으로 길게 늘어진 형태이다.

 

from sklearn.model_selection import train_test_split

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3, random_state=1)

train_test_split으로 train set과 test set을 구분했다.

 

from keras.models import Sequential
from keras.layers import Dense

model = Sequential()
model.add(Dense(units = 20, activation = 'relu', input_dim = 784)
model.add(Dense(units = 15, activation = 'relu')
model.add(Dense(units = 10, activation = 'softmax')

모델에 layer을 순차적으로 쌓기 위해 model에 Sequential()을 부여하고, input layer, hidden layer, output layer을 model.add(Dense( ... ) )으로 한 층 씩 쌓아주겠다. 

train set은 784개의 픽셀, 즉 784개의 feature로 이루어져 있으므로 input layer에서 input_dim을 784로 설정해 준다. 

input layer와 hidden layer의 units, 즉 노드의 수는 임의로 설정해준 값이고, activation function은 relu로 설정했다. 마지막으로 output layer은 10개의 class를 분류해야 하므로 units를 10으로, activation function을 softmax로 두었다. 

 

model.compile(loss='categorical_cross_entropy',\
              optimizer = Adam(learning_rate = 0.001), metrics = ['accuracy'])

다음으로 모델의 학습 과정을 설정해 주겠다. optimizer = 'adam'으로 하면 모든 hyperparameter가 default로 설정되고, optimizer = Adam( ... )으로 하면 세부적인 hyper parameter 값을 설정할 수 있다. 여기선 learning rate를 0.001로 설정했다. 

 

hist = model.fit(X_train,y_train,epochs = 10, batch_size = 100, verbose = 0)

model을 fit으로 학습을 해준다. 

'딥러닝 > 인공신경망' 카테고리의 다른 글

LSTM 실습: reuters 예제  (0) 2021.07.27
LSTM 실습: imdb 예제  (0) 2021.07.26
CNN 실습: fashion mnist 예제  (0) 2021.07.23
CNN 실습: mnist 예제  (0) 2021.07.22
tensorflow, keras 실습: Iris data  (0) 2021.07.22