티스토리 뷰
3. Convolutional Networks / L2. Convolutional Neural Networks - Mini Project : Training an MLP on MNIST
chrisysl 2018. 9. 5. 12:11Mini Project : Training an MLP on MNIST
- 딥러닝은 이해하려 한다면 쉽지않을뿐더러, 실무에서 관습상 자연스레 사용하는 것들이 이론보다 앞서있는 경우가 많다.
- 딥러닝이 처음인 경우 모델의 작동방식에 대한 직관을 키우기위해 여러 모델을 가지고 이런저런 시도를 해보는 것이 좋다.
- 이번 미니 프로젝트에선 제공된 mnist_mlp.ipynb 파일을 바탕으로
- 신경망을 수정하고 모델의 구성을 변경해보며 그 결과를 비교해볼 것임.
** 참고
- over-fitting 이 감지되고있다는 판단의 근거는 validation loss와 training loss를 비교함으로써 알아낼 수 있다.
- training loss가 validation loss보다 훨씬 낮은경우 그 모델은 over-fitting되었다고 판단할 수 있다.
Training an MLP on MNIST
· 1. hidden layer의 노드 수를 증가시키고 감소시키며 over-fitting 또는 under-fitting의 근거 파악
- 최초 디폴트값
- 노드의 수를 64로 줄였을 때
- 노드의 수를 2048로 늘렸을 때
- 노드수 518 / training_loss : 0.0273 / validation_loss : 0.0975
- ( training_loss < validation_loss / abs(training_loss - validation_loss) = 0.0702)
- 노드수 64 / training_loss : 0.1254 / validation_loss : 0.1100
- ( training_loss > validation_loss / abs(training_loss - validation_loss) = 0.0154)
- 노드수 2048 / training_loss : 0.0417 / validation_loss : 0.1399
- ( training_loss < validation_loss / abs(training_loss - validation_loss) = 0.0982)
- 따라서 노드의 개수 518개를 기준으로 아래로 낮추게 될 경우
- 상대적으로 under-fitting, 올리게 될 경우 over-fitting이 되고있음을 확인할 수 있다.
· 2. hidden layer의 수를 증가시키고 감소시키며 over-fitting 또는 under-fitting의 근거 파악
- 디폴트값은 위 참고
- hidden layer 2개추가(그에따른 dropout도 2개 추가)
- hidden layer 2개제거(hidden layer 총 0개)
- 노드수 518 / hidden_layer : 2개 / training_loss : 0.0273 / validation_loss : 0.0975 / Test_accuracy : 97.9700%
- ( training_loss < validation_loss / abs(training_loss - validation_loss) = 0.0702)
- 노드수 518 / hidden_layer : 4개 / training_loss : 0.0735 / validation_loss : 0.1569 / Test_accuracy : 98.0600%
- ( training_loss < validation_loss / abs(training_loss - validation_loss) = 0.0834)
- 노드수 518 / hidden_layer : 0개 / training_loss : 0.2688 / validation_loss : 0.2663 / Test_accuracy : 92.5100%
- ( training_loss > validation_loss / abs(training_loss - validation_loss) = 0.0025)
- 따라서 hidden layer의 개수를 기준으로
- layer의 개수를 늘리게 될 경우 Test_accuracy는 더 커지지만, 상대적으로 over-fitting
- 줄이게 될 경우 Test_accuracy 감소 및 상대적으로 under-fitting이 되고있음을 확인할 수 있다.
· 3. dropout 레이어 제거 후 over-fitting 여부 확인
- 디폴트값은 위 참고
- dropout layer 제거 후
- 노드수 518 / hidden_layer : 2개 / dropout : 2개 / training_loss : 0.0273 / validation_loss : 0.0975 / Test_accuracy : 97.9700%
- ( training_loss < validation_loss / abs(training_loss - validation_loss) = 0.0702)
- 노드수 518 / hidden_layer : 2개 / dropout: 0개 / training_loss : 0.0102 / validation_loss : 0.1480 / Test_accuracy : 97.9100%
- ( training_loss < validation_loss / abs(training_loss - validation_loss) = 0.1378)
- 따라서 dropout 레이어가 없는경우 Test_accuracy 감소, 상대적으로 over_fitting됨
· 4. ReLU activation function 제거시 test accuracy에 어떤 영향을 미치는지?
- ReLU function 제거
- 노드수 518 / hidden_layer(ReLU function activated) : 2개 / training_loss : 0.0273 / validation_loss : 0.0975 / Test_accuracy : 97.9700%
- ( training_loss < validation_loss / abs(training_loss - validation_loss) = 0.0702)
- 노드수 518 / hidden_layer(ReLU function deactivated) : 2개 / training_loss : 0.3206 / validation_loss : 0.2985 / Test_accuracy : 91.5600%
- ( training_loss > validation_loss / abs(training_loss - validation_loss) = 0.0221)
- ReLU activation function 제거시 Test accuracy 감소, 상대적으로 under_fitting 됨
· 5. pre-processing step 제거시 test accuracy에 어떤 영향을 미치는지?
- pre-processing step 주석처리
- Test accuracy가 급감한 것을 확인할 수 있다.
- 즉, pre-processing step에서 모든 픽셀을 255로 나눠줘 0과 1사이의 값으로 정규화 해 주는것은
- 정확도와 직결되는 부분이라는 결론을 내릴 수 있다.
· 6. 다른 optimizer를 사용했을때의 test accuracy에 어떤 영향을 미치는지?
- optimizer를 SGD(stochastic gradient descent)로 변경
- optimizer : RMSProp / Test_accuracy : 97.9700%
- optimizer : SGD / Test_accuracy : 93.3400%
- RMSProp 가 더 정확한 Test_accuracy를 도출해냄
· 7. batch 크기를 증감하였을땐?
- batch 크기 512일 때
- batch 크기 32일 때
- batch size = 128 / Test_accuracy : 97.9700%
- 인자들이 모델의 정확도에 미치는 영향에 대해 더 알아보려면 아래
- https://machinelearningmastery.com/grid-search-hyperparameters-deep-learning-models-python-keras/