[케라스] 딥러닝 모델 작성순서
23 Jan 2020
Reading time ~2 minutes
김태영님의 블록과 함께 하는 파이썬 딥러닝 케라스 를 학습하며 정리하는 내용입니다.
케라스로 딥러닝 모델 만들기
케라스로 딥러닝 모델을 만들기 위해서는 아래와 같은 기본적인 순서로 코드를 작성하게 됩니다.
1. 데이터셋 생성하기
- 원본 데이터를 불러오거나 시뮬레이션 등을 통해 데이터를 생성합니다.
- 이 데이터들로부터 train, validation, test 데이터 셋을 생성합니다.
- 딥러닝 모델이 데이터를 원활히 읽고, 학습하기 위한 포맷 변환을 합니다.
2. 모델 구성하기
- Sequence 모델을 생성한 뒤 필요한 레이어를 추가하여 구성합니다.
- 복잡한 모델이 필요할 때는 케라스에서 활용가능한 여러 함수들을 이용합니다.
3. 모델 학습과정 설정하기
- 학습하기 전에 학습에 대한 설정을 수행합니다.(손실함수, 최적화 방법 등)
- 케라스에서는
compile( )함수를 이용하여 학습과정을 설정합니다.
4. 모델 학습
- 위에서 구성한 모델을
fit( )함수를 이용하여 train 데이터 셋을 학습시킵니다.
5. 학습과정 살펴보기
- 모델 학습 시, train, validation 데이터셋의 손실 및 정확도 등을 측정합니다.
- 반복횟수에 따른 손실 및 정확도의 추이를 보며 학습 상황을 판단합니다.
6. 모델 평가하기
evaluate( )함수로 test 데이터셋으로 모델을 평가합니다.
7. 모델 사용하기
predict( )함수로 임의의 입력값에 대한 모델의 출력값을 얻습니다.
MNIST 데이터셋을 통한 분류 모델의 구현 예시
가로세로 픽셀이 28 x 28 인 이미지를 입력받아 784 (28 x 28) 벡터로 구성한 다음, 이를 학습/평가하는 코드 예시입니다.
# 0. 필요한 패키지 불러오기
from keras.utils import np_utils
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Activation
# 1. 데이터셋 생성하기
(x_train, y_train), (x_test, y_test) = mnist.load_data()
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)
# 2. 모델 구성하기
model = Sequential()
model.add(Dense(units=64, input_dim=28*28, activation='relu'))
model.add(Dense(units=10, activation='softmax'))
# 3. 모델 학습과정 설정하기
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
# 4. 모델 학습시키기
hist = model.fit(x_train, y_train, epochs=5, batch_size=32)
# 5. 학습과정 살펴보기
print('## training loss and acc ##')
print(hist.history['loss'])
print(hist.history['accuracy'])
# 6. 모델 평가하기
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=32)
print('## evaluation loss and_metrics ##')
print(loss_and_metrics)
# 7. 모델 사용하기
xhat = x_test[0:1]
yhat = model.predict(xhat)
print('## yhat ##')
print(yhat)
# 결과:
Epoch 1/5
60000/60000 [==============================] - 1s 22us/step - loss: 0.6904 - accuracy: 0.8220
Epoch 2/5
60000/60000 [==============================] - 1s 22us/step - loss: 0.3511 - accuracy: 0.9025
Epoch 3/5
60000/60000 [==============================] - 1s 22us/step - loss: 0.3037 - accuracy: 0.9139
Epoch 4/5
60000/60000 [==============================] - 1s 22us/step - loss: 0.2756 - accuracy: 0.9222
Epoch 5/5
60000/60000 [==============================] - 1s 22us/step - loss: 0.2542 - accuracy: 0.9288
## training loss and acc ##
[0.6903821740627288, 0.3510775326768557, 0.30374961163202924, 0.2755953017512957, 0.2541987054069837]
[0.82205, 0.90245, 0.91386664, 0.92216665, 0.92878336]
10000/10000 [==============================] - 0s 13us/step
## evaluation loss and_metrics ##
[0.2411062575995922, 0.9319000244140625]
## yhat ##
[[1.5453045e-04 1.0505996e-07 3.3818383e-04 2.3072090e-03 3.8662820e-06
1.4190700e-04 1.6966163e-07 9.9561751e-01 4.3625954e-05 1.3929385e-03]]
Reference
- 블록과 함께 하는 파이썬 딥러닝 케라스(김태영 저)