본문 바로가기
DeepLearning Framework & Coding/Microsoft AzureML

[Microsoft AzureML - 11] 이미지 데이터 학습 with Neural Network

by 노마드공학자 2021. 6. 27.

※ 이전글

[Microsoft AzureML - 0] Intro https://limitsinx.tistory.com/113

[Microsoft AzureML - 1] 개발 환경 세팅 https://limitsinx.tistory.com/114

[Microsoft AzureML - 2] 학습할 데이터 불러오기 https://limitsinx.tistory.com/115

[Microsoft AzureML - 3] 데이터 전처리(Data pre-processing) - I https://limitsinx.tistory.com/116

[Microsoft AzureML - 4] 데이터 전처리(Data pre-processing) - II https://limitsinx.tistory.com/117

[Microsoft AzureML - 5] 학습모델 구현 및 검증 https://limitsinx.tistory.com/118

[Microsoft AzureML - 6] 여러 학습모델 동시에 성능비교 https://limitsinx.tistory.com/119

[Microsoft AzureML - 7] Binary Classification with Kaggle https://limitsinx.tistory.com/120

[Microsoft AzureML - 8] 모델 선정과 Hyper Parameter 자동튜닝 https://limitsinx.tistory.com/121

[Microsoft AzureML - 9] 학습데이터 CSV로 Export하기 https://limitsinx.tistory.com/122

[Microsoft AzureML - 10] 데이터 Feature Engineering https://limitsinx.tistory.com/123

 


 

출처 : https://morioh.com/p/e9539c98d631

 

MNIST 데이터는 이미지 학습을 시키는 사람들에게는 거의...

C언어 "Hello world" 급으로, 누구나 알고있는 데이터입니다.

 

마침 AzureML에서도 MNIST데이터를 샘플로 내장하고있어서 이미지 학습시키는법을 한번 진행해보고자 합니다.

 

 

[Saved Datasets] -> [Samples]를 보시면, MNIST데이터가 Train용/Test용으로 나뉘어져 있습니다.

 

기존에는, 한개 데이터 뭉텅이를 Split해서 70%는 학습용, 30%는 검증용 이렇게 사용했는데요

 

이번에는 두가지 데이터가 나뉘어져 있습니다.

 

이미지 데이터 학습?

 

일단, 이미지데이터는 어떻게 학습시킬까요??

 

기존에는 6개 내지 7개의 Feature를 가진 데이터를 학습시켰는데요..

 

출처 : https://medium.com/comet-ml/real-time-numbers-recognition-mnist-on-an-iphone-with-coreml-from-a-to-z-283161441f90

 

MNIST데이터의 숫자를 자세히 들여다보면 이렇게 나누어져있습니다.

즉, 흑백이미지이기에 0을 검은색, 255를 흰색으로 두고 숫자로 쭉 나열된 형태죠

 

전체 pixel의 갯수는 128*128 = 16384개입니다.

 

그럼 이 16384개를 한개의 행으로 쭉~~ 옆으로 나열하면, 16384개의 Feature를 가진 데이터가 되는것입니다 :)

기존에 십수개 Feature를 다루던것이 pixel갯수만큼 된다고 생각하시면 쉽습니다!

 

Train Model에서 Selected Columns는 Label만 추가해주면 됩니다.

나머지 16384개는 Pixel값으로 Feature기 때문입니다!

 

 

MNIST 데이터를 학습시키기 위한 전체적인 Diagram입니다.

일단은, Split data로 Train용 MNIST Data를 7:3으로 나누어 학습과 검증을 진행했습니다.

 

Train Model은 0/1 구분도 아니고, Regression도 아닌 0~9까지 구분할 수 있는 Multi classification문제이기에 

일단은 Multi-class Logistic Regression으로 해보았습니다.

 

 

이에대한 결과로는, 정확도가 이정도로 나오네요

각숫자들을 예측할때의 정확도인데, 1과 같이 특색이 뚜렷한 숫자들이 정확도가 아주 높게나오는것을 볼 수 있습니다!

 

전체적인 정확도는 91.9%정도로 나오네요

 

학습모델 바꾸어보기

 

학습모델을 한번 바꾸어서 Multi-class Decision Forest로 진행해보겠습니다!

 

Decision Forest는 Logistic Regression보다 대체적으로 정합성이 좋으며, 비선형성이 강한 모델에 많이 사용됩니다.

(하지만 연산속도 측면에서는 상대적으로 느립니다.)

학습모델만 바꾸어주었을뿐인데.. 놀랍게도 94%로 약 3%가까운 성능향상을 보여주었습니다.

 

 

이번에는 처음으로 머신러닝다운 모델을 사용하는데요.. 바로 "Neural Network"를 사용해보겠습니다.

 

이전글에서 다루었던, Tune Hyper Parameter 블록을 활용하여, Random Sweep 5회정도로 학습을 진행했습니다.

 

Neural Network는 이번글에서 처음다루어 보는데요

 

AzureML의 특성상 초기값들은 보통 Default로 들어가있고, 범용적인 범위에서 잘맞도록 Learning Rate나 세부적인 파라미터들은 Default로 저장되어있습니다.

 

세부적으로도 직접 바꾸어줄순 있겠지만, 그럴려면 차라리 Python으로 코드를 짜는게 낫다고 판단되기에.. Tune Model 블록으로 자동으로 파라미터를 조정해줍니다!

 

결과값이 97.6%까지 정확도가 올라갔네요

 

즉, 처음 Logistic Regression으로 91%였던것이 Neural Network를 사용하니 97.6%까지 올라갔습니다.

 

이정도면, 악필로 숫자를 쓰는사람을 고려하면 거의 사람에 근접한 성능이라고 합니다.

 


 

지금까지는 라벨링이 완료된 데이터를 7:3으로 나누어 비교검증해보는식으로 모델링을 진행했었는데요

 

실제 Field에서는 라벨링이 완료된 데이터로 학습시키긴 하지만, Test해야하는 데이터는 Label이 없고, 이 Label을 찾아야하는게 오히려 목적이죠!

 

따라서, Labeling되어있지 않은 데이터를 통해 학습모델로 실제 Label을 추정해보는 방법을 정리해보겠습니다.

 

댓글