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 |