1. 데이터셋 생성하기- 원본 데이터를 불러오거나 시뮬레이션을 통해 데이터를 생성합니다.
- 데이터로부터 훈련셋, 검증셋, 시험셋을 생성합니다.
- 이 때 딥러닝 모델의 학습 및 평가를 할 수 있도록 포맷 변환을 합니다.
X_train (50000, 28, 28)
X_train (50000,)
X_train (10000, 28, 28)
X_train (10000,)
2. 모델 구성하기- 시퀀스 모델을 생성한 뒤 필요한 레이어를 추가하여 구성합니다.
- 좀 더 복잡한 모델이 필요할 때는 케라스 함수 API를 사용합니다.
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense (Dense) (None, 64) 50240
_________________________________________________________________
dense_1 (Dense) (None, 10) 650
=================================================================
Total params: 50,890
Trainable params: 50,890
Non-trainable params: 0
_________________________________________________________________
3. 모델 학습과정 설정하기- 학습하기 전에 학습에 대한 설정을 수행합니다.
- 손실 함수 및 최적화 방법을 정의합니다.
- 케라스에서는 compile() 함수를 사용합니다.
4. 모델 학습시키기- 훈련셋을 이용하여 구성한 모델로 학습시킵니다.
- 케라스에서는 fit() 함수를 사용합니다. #### 4.1 배치사이즈
- 몇 개를 처리하고 해답을 맞추는지를 의미함
- 100 : 100개를 처리하고 해답을 맞춤
- 1: 1개를 처리하고 해답을 맞춤
- 배치사이즈가 작을수록 갱신이 자주 발생함 #### 4.2 에폭
- 같은 데이터셋으로 반복적으로 가중치를 갱신하면서 학습
- 서로 다른 20문제를 1번 푸는 경우보다 같은 1문제를 20번 푸는 경우 정확도가 높다.
Train on 700 samples, validate on 300 samples
Epoch 1/3000
700/700 [==============================] - 1s 815us/sample - loss: 2.0419 - accuracy: 0.3129 - val_loss: 1.8210 - val_accuracy: 0.5333
Epoch 2/3000
700/700 [==============================] - 0s 182us/sample - loss: 1.5409 - accuracy: 0.6786 - val_loss: 1.3969 - val_accuracy: 0.7200
Epoch 3/3000
700/700 [==============================] - 0s 187us/sample - loss: 1.1772 - accuracy: 0.7900 - val_loss: 1.1068 - val_accuracy: 0.7733
Epoch 4/3000
700/700 [==============================] - 0s 194us/sample - loss: 0.9411 - accuracy: 0.8214 - val_loss: 0.9285 - val_accuracy: 0.8000
Epoch 5/3000
700/700 [==============================] - 0s 189us/sample - loss: 0.7842 - accuracy: 0.8457 - val_loss: 0.8042 - val_accuracy: 0.8300
Epoch 6/3000
700/700 [==============================] - 0s 185us/sample - loss: 0.6788 - accuracy: 0.8614 - val_loss: 0.7365 - val_accuracy: 0.8133
Epoch 7/3000
700/700 [==============================] - 0s 185us/sample - loss: 0.6046 - accuracy: 0.8757 - val_loss: 0.6683 - val_accuracy: 0.8267
Epoch 8/3000
700/700 [==============================] - 0s 183us/sample - loss: 0.5469 - accuracy: 0.8800 - val_loss: 0.6257 - val_accuracy: 0.8333
Epoch 9/3000
700/700 [==============================] - 0s 180us/sample - loss: 0.4994 - accuracy: 0.8929 - val_loss: 0.5964 - val_accuracy: 0.8367
Epoch 10/3000
700/700 [==============================] - 0s 180us/sample - loss: 0.4653 - accuracy: 0.8971 - val_loss: 0.5717 - val_accuracy: 0.8433
Epoch 11/3000
700/700 [==============================] - 0s 177us/sample - loss: 0.4339 - accuracy: 0.9043 - val_loss: 0.5559 - val_accuracy: 0.8433
Epoch 12/3000
700/700 [==============================] - 0s 197us/sample - loss: 0.4055 - accuracy: 0.9086 - val_loss: 0.5413 - val_accuracy: 0.8400
Epoch 13/3000
700/700 [==============================] - 0s 182us/sample - loss: 0.3818 - accuracy: 0.9114 - val_loss: 0.5225 - val_accuracy: 0.8433
Epoch 14/3000
700/700 [==============================] - 0s 178us/sample - loss: 0.3599 - accuracy: 0.9300 - val_loss: 0.5138 - val_accuracy: 0.8533
Epoch 15/3000
700/700 [==============================] - 0s 182us/sample - loss: 0.3430 - accuracy: 0.9329 - val_loss: 0.5007 - val_accuracy: 0.8433
Epoch 16/3000
700/700 [==============================] - 0s 187us/sample - loss: 0.3243 - accuracy: 0.9386 - val_loss: 0.4940 - val_accuracy: 0.8500
Epoch 17/3000
700/700 [==============================] - 0s 185us/sample - loss: 0.3099 - accuracy: 0.9386 - val_loss: 0.4970 - val_accuracy: 0.8467
Epoch 18/3000
700/700 [==============================] - 0s 184us/sample - loss: 0.2957 - accuracy: 0.9471 - val_loss: 0.4834 - val_accuracy: 0.8467
Epoch 19/3000
700/700 [==============================] - 0s 195us/sample - loss: 0.2833 - accuracy: 0.9486 - val_loss: 0.4844 - val_accuracy: 0.8500
Epoch 20/3000
700/700 [==============================] - 0s 182us/sample - loss: 0.2710 - accuracy: 0.9500 - val_loss: 0.4834 - val_accuracy: 0.8467
Epoch 21/3000
700/700 [==============================] - 0s 178us/sample - loss: 0.2596 - accuracy: 0.9543 - val_loss: 0.4727 - val_accuracy: 0.8433
Epoch 22/3000
700/700 [==============================] - 0s 178us/sample - loss: 0.2501 - accuracy: 0.9529 - val_loss: 0.4751 - val_accuracy: 0.8467
Epoch 23/3000
700/700 [==============================] - 0s 186us/sample - loss: 0.2382 - accuracy: 0.9543 - val_loss: 0.4749 - val_accuracy: 0.8367
Epoch 24/3000
700/700 [==============================] - 0s 180us/sample - loss: 0.2308 - accuracy: 0.9543 - val_loss: 0.4693 - val_accuracy: 0.8433
Epoch 25/3000
700/700 [==============================] - 0s 184us/sample - loss: 0.2212 - accuracy: 0.9571 - val_loss: 0.4645 - val_accuracy: 0.8433
Epoch 26/3000
700/700 [==============================] - 0s 177us/sample - loss: 0.2132 - accuracy: 0.9600 - val_loss: 0.4645 - val_accuracy: 0.8467
Epoch 27/3000
700/700 [==============================] - 0s 184us/sample - loss: 0.2063 - accuracy: 0.9629 - val_loss: 0.4608 - val_accuracy: 0.8533
Epoch 28/3000
700/700 [==============================] - 0s 181us/sample - loss: 0.1989 - accuracy: 0.9614 - val_loss: 0.4622 - val_accuracy: 0.8433
Epoch 29/3000
700/700 [==============================] - 0s 180us/sample - loss: 0.1913 - accuracy: 0.9700 - val_loss: 0.4621 - val_accuracy: 0.8467
Epoch 30/3000
700/700 [==============================] - 0s 180us/sample - loss: 0.1845 - accuracy: 0.9700 - val_loss: 0.4593 - val_accuracy: 0.8500
Epoch 31/3000
700/700 [==============================] - 0s 188us/sample - loss: 0.1786 - accuracy: 0.9686 - val_loss: 0.4628 - val_accuracy: 0.8433
Epoch 32/3000
700/700 [==============================] - 0s 180us/sample - loss: 0.1723 - accuracy: 0.9671 - val_loss: 0.4585 - val_accuracy: 0.8467
Epoch 33/3000
700/700 [==============================] - 0s 184us/sample - loss: 0.1655 - accuracy: 0.9700 - val_loss: 0.4600 - val_accuracy: 0.8400
Epoch 34/3000
700/700 [==============================] - 0s 183us/sample - loss: 0.1603 - accuracy: 0.9757 - val_loss: 0.4544 - val_accuracy: 0.8500
Epoch 35/3000
700/700 [==============================] - 0s 178us/sample - loss: 0.1556 - accuracy: 0.9771 - val_loss: 0.4536 - val_accuracy: 0.8500
Epoch 36/3000
700/700 [==============================] - 0s 178us/sample - loss: 0.1509 - accuracy: 0.9771 - val_loss: 0.4589 - val_accuracy: 0.8533
Epoch 37/3000
700/700 [==============================] - 0s 182us/sample - loss: 0.1454 - accuracy: 0.9757 - val_loss: 0.4647 - val_accuracy: 0.8467
Epoch 38/3000
700/700 [==============================] - 0s 180us/sample - loss: 0.1406 - accuracy: 0.9771 - val_loss: 0.4564 - val_accuracy: 0.8533
Epoch 39/3000
700/700 [==============================] - 0s 189us/sample - loss: 0.1375 - accuracy: 0.9800 - val_loss: 0.4646 - val_accuracy: 0.8400
Epoch 40/3000
700/700 [==============================] - 0s 182us/sample - loss: 0.1324 - accuracy: 0.9800 - val_loss: 0.4661 - val_accuracy: 0.8433
Epoch 41/3000
700/700 [==============================] - 0s 187us/sample - loss: 0.1286 - accuracy: 0.9829 - val_loss: 0.4609 - val_accuracy: 0.8467
Epoch 42/3000
700/700 [==============================] - 0s 182us/sample - loss: 0.1246 - accuracy: 0.9843 - val_loss: 0.4686 - val_accuracy: 0.8433
Epoch 43/3000
700/700 [==============================] - 0s 182us/sample - loss: 0.1209 - accuracy: 0.9843 - val_loss: 0.4651 - val_accuracy: 0.8467
Epoch 44/3000
700/700 [==============================] - 0s 183us/sample - loss: 0.1174 - accuracy: 0.9843 - val_loss: 0.4637 - val_accuracy: 0.8500
Epoch 45/3000
700/700 [==============================] - 0s 183us/sample - loss: 0.1151 - accuracy: 0.9843 - val_loss: 0.4643 - val_accuracy: 0.8500
Epoch 46/3000
700/700 [==============================] - 0s 183us/sample - loss: 0.1111 - accuracy: 0.9871 - val_loss: 0.4646 - val_accuracy: 0.8467
Epoch 47/3000
700/700 [==============================] - 0s 186us/sample - loss: 0.1082 - accuracy: 0.9857 - val_loss: 0.4632 - val_accuracy: 0.8500
Epoch 48/3000
700/700 [==============================] - 0s 185us/sample - loss: 0.1050 - accuracy: 0.9871 - val_loss: 0.4673 - val_accuracy: 0.8533
Epoch 49/3000
700/700 [==============================] - 0s 181us/sample - loss: 0.1020 - accuracy: 0.9886 - val_loss: 0.4675 - val_accuracy: 0.8533
Epoch 50/3000
700/700 [==============================] - 0s 187us/sample - loss: 0.0995 - accuracy: 0.9886 - val_loss: 0.4712 - val_accuracy: 0.8467
Epoch 51/3000
700/700 [==============================] - 0s 189us/sample - loss: 0.0968 - accuracy: 0.9943 - val_loss: 0.4728 - val_accuracy: 0.8467
Epoch 52/3000
700/700 [==============================] - 0s 182us/sample - loss: 0.0938 - accuracy: 0.9929 - val_loss: 0.4764 - val_accuracy: 0.8400
Epoch 53/3000
700/700 [==============================] - 0s 180us/sample - loss: 0.0921 - accuracy: 0.9943 - val_loss: 0.4709 - val_accuracy: 0.8533
Epoch 54/3000
700/700 [==============================] - 0s 195us/sample - loss: 0.0892 - accuracy: 0.9943 - val_loss: 0.4723 - val_accuracy: 0.8467
Epoch 55/3000
700/700 [==============================] - 0s 217us/sample - loss: 0.0868 - accuracy: 0.9929 - val_loss: 0.4804 - val_accuracy: 0.8433
5. 학습과정 그래프로 확인- 히스토리 객체 생성
- 매 에포크 마다의 훈련 손실값 (loss)
- 매 에포크 마다의 훈련 정확도 (acc)
- 에포크 마다의 검증 손실값 (val_loss)
- 에포크 마다의 검증 정확도 (val_acc)
6. 학습과정 살펴보기- 모델 학습 시 훈련셋, 검증셋의 손실 및 정확도를 측정합니다.
- 반복횟수에 따른 손실 및 정확도 추이를 보면서 학습 상황을 판단합니다.
## training loss and accuracy ##
[2.0419211881501336, 1.5409253665379115, 1.1771854221820832, 0.9410809934139251, 0.7841743243592126, 0.6788169511726925, 0.6045727116721017, 0.5468997001647949, 0.4994056367448398, 0.4653066309435027, 0.4338944137096405, 0.4055074259638786, 0.381782277567046, 0.35985985643097335, 0.34295848714453836, 0.32433042845555715, 0.30987360190067975, 0.29571038857102394, 0.2832924458597388, 0.27103595499481475, 0.25960704343659535, 0.2500637164073331, 0.23822095984859126, 0.23081263112170355, 0.22120115011930466, 0.21322909205087592, 0.20634417033621244, 0.19885411805340222, 0.19132203592785768, 0.18454416830624853, 0.17862763713513102, 0.17228798467133727, 0.16551255988223212, 0.16026490264173066, 0.15561421875442777, 0.15091095731726714, 0.1453756115266255, 0.14064619498593467, 0.1374890526756644, 0.13236010032040732, 0.1286182037421635, 0.12462563512048551, 0.12093820183404855, 0.11740979113216911, 0.11507339770240443, 0.11105127796264631, 0.10815800014617187, 0.10497469404446227, 0.10204301001504064, 0.09953351880290678, 0.09681675136089325, 0.0937716618180275, 0.09213573424411671, 0.08918252981134824, 0.0867899821006826]
[0.31285715, 0.6785714, 0.79, 0.8214286, 0.8457143, 0.86142856, 0.8757143, 0.88, 0.89285713, 0.8971428, 0.9042857, 0.9085714, 0.9114286, 0.93, 0.93285716, 0.93857145, 0.93857145, 0.94714284, 0.94857144, 0.95, 0.95428574, 0.95285714, 0.95428574, 0.95428574, 0.95714283, 0.96, 0.9628571, 0.9614286, 0.97, 0.97, 0.9685714, 0.9671429, 0.97, 0.97571427, 0.9771429, 0.9771429, 0.97571427, 0.9771429, 0.98, 0.98, 0.98285717, 0.9842857, 0.9842857, 0.9842857, 0.9842857, 0.98714286, 0.98571426, 0.98714286, 0.9885714, 0.9885714, 0.9942857, 0.99285716, 0.9942857, 0.9942857, 0.99285716]
7. 모델 평가하기- 준비된 시험셋으로 학습한 모델을 평가합니다.
- 케라스에서는 evaluate() 함수를 사용합니다.
10000/10000 [==============================] - 0s 45us/sample - loss: 0.4099 - accuracy: 0.8765
## evaluation loss and_metrics ##
loss : 0.40992161306738856
accuracy : 0.8765
8. 모델 사용하기- 임의의 입력으로 모델의 출력을 얻습니다.
- 케라스에서는 predict() 함수를 사용합니다.
## yhat ##
[[4.7322857e-05 3.1801980e-07 9.2279763e-05 5.7126595e-05 1.9433016e-06
2.4763335e-06 1.6186391e-07 9.9790311e-01 1.9174853e-05 1.8761606e-03]]
Out[12]:
|