앞에서 이어집니다. Mnist hands-on 두번째 입니다.
1. Mnist data 살펴보기
2. Mnist - DNN(Deep Neural Network)로 학습해보기
3. Mnist - CNN으로 학습해서 정확도 높이기
4. 직접쓴 숫자 넣어보기, 연구 적용 고민
앞서 다뤄보았던 Mnist 데이터를 이용해서 간단한 딥러닝을 수행해보려고 합니다.
DNN 부분은 Markdown 부분에 코드를 적어놓아서, 아래에 코딩을 직접 따라서 해 볼 수도 있고, 복사/붙여넣기로 진행해볼 수도 있습니다.
주요 라이브러리를 불러오고 Mnist 데이터셋을 불러옵니다.
Neural network에 넣기 위해서는 배열의 형태, demension을 맞춰주어야 합니다.
28x28 형태로 되어있던 것을 784 로 만들어 주는 것은 2D 형태였던 데이터를 1열(1D)로 만드는 것을 뜻합니다.
모든 값을 255로 나누는 것은 값을 0-1 사이에 위치시켜(scaling) 학습을 원활하게 합니다.
앞서 설명했던대로, label 값은 one hot vector 형식으로 변경해줍니다.
모델은 64개의 뉴런으로 구성된 Dense 층을 Input 으로 하고, 10개의 뉴런(label 이 10가지) 의 output 층을 갖습니다.
Hidden layer은 64개의 뉴런층이 두층 추가되어있습니다.
여기서도 Input 부분의 dimension과 output 부분뉴런 개수가 X_train 값, Y_train 값의 형태와 잘 맞아야 합니다.
최근에 activation은 그냥 relu를 사용하는 경향이 있고, 마지막 output 층에서만 softmax(classification의 경우만) 를 사용하였습니다.
*Activation 이란?
loss 를 계산 하는 방법 (Cost function)도 classification의 경우에는 일반적으로 cross-entropy 방식을 사용합니다.
* Cost function 이란?
학습이 모두 완료되었다면, test set 을 이용하여 test를 진행합니다.
accuracy가 0.935 정도 나왔습니다.
다음에서 이어집니다.
1. Mnist data 살펴보기
2. Mnist - DNN(Deep Neural Network)로 학습해보기
3. Mnist - CNN으로 학습해서 정확도 높이기
4. 직접쓴 숫자 넣어보기, 연구 적용 고민
-----------------<CODE>---------------------
# 주요 라이브러리 불러오기
from keras.utils import np_utils
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Activation
# Mnist 데이터셋 불러오기
(X_train, Y_train), (X_test, Y_test) = mnist.load_data()
#Train set 과 Test set 정리하기
X_train = X_train.reshape(60000, 784).astype('float32') / 255.0
X_test = X_test.reshape(10000, 784).astype('float32') / 255.0
Y_train = np_utils.to_categorical(Y_train)
Y_test = np_utils.to_categorical(Y_test)
# Neural Network 만들고 학습하기
model = Sequential()
model.add(Dense(units=64, input_dim=784, activation='relu'))
model.add(Dense(units=64, activation='relu'))
model.add(Dense(units=64, activation='relu'))
model.add(Dense(units=10, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
hist = model.fit(X_train, Y_train, batch_size=128, epochs=20, verbose=1, validation_data=(X_test, Y_test))
# Test
loss_and_metrics = model.evaluate(X_test, Y_test, batch_size=32)
print('loss_and_metrics : ' + str(loss_and_metrics))
댓글
댓글 쓰기