2020년 3월 13일 금요일

Cylab diary 06 - 다양한 예제들을 돌려보자!_CNN 편

저번 포스팅에 이어지는 글입니다.

CIFAR100 데이터셋으로 CNN을 돌려보고 있었습니다. 처음 돌려본 모델의 경우 
conv 32 3*3 valid / FC 128 / FC100 이었는데 Training Set Acc 35% / Test Set Acc 25% (Epochs 10 기준) 이 나왔습니다. Optimizer나 Learning rate 등은 튜토리얼의 세팅값을 바꾸지 않을 예정입니다. 나머지를 바꿔보면서 어떤 방향으로 학습을 시켜야 잘 이루어지는지 확인해 보는 방향으로 가고 싶어서요! (사실 튜토리얼 세팅값이 이 경우에서도 적절할 거라는 생각이 있기 때문이지만요..)

제가 바꿔볼 값들은 레이어 / 노드 수 / Regularization 방법 정도인 것 같습니다.
한번 돌리고 나서 돌아가는 속도가 너무 오래 걸려서 좀 답답하네요.. 컴퓨터를 사던가 코랩 업그레이드 버전을 구매하던가 해야할 것 같아요...

우선 위에 명시되어 있는 conv 32 / FC 128 / FC100 버전을 살펴보도록 하죠!
이번에는 에폭을 50으로 주고 새로 돌려보았는데, 결과가 엄청 다르게 나왔네요. 한번 살펴볼게요.


트레이닝 셋이랑 테스트 셋에서 정확도가 극명하게 다르게 나왔습니다. 오버피팅 때문일텐데, 모델에 Regularization을 하나도 넣지 않아서 발생한 문제일 것 같아요! 이후에 넣을 모델에는 Dropout으로 정규화를 했는데, 이것도 바꿔가면서 실험해봐도 좋을 것 같습니다. 아마 Batch norm을 활용해서 할 것 같은데, 돌리는데 조금 걸려서 쓰는데 오래걸리네요ㅠ

음... 여러가지 모델을 돌려보는 중입니다!
그런데 대부분 epoch를 늘리면 트레이닝 셋에서는 정확도가 올라가는데 비해 테스트셋에서는 거의 25%를 넘지 못해서 regularization에 주안점을 두고 코드를 짜고 있습니다.
conv 32 / Dropout / FC 256 / Dropout / FC100 을 넣고 해봐도 오버피팅이 너무 심해서 Batch norm을 넣어보았습니다. conv 32 뒤에는 Batch norm을 넣어서 정규화를 한 번 해주었는데 이 경우 dropout만 사용하였을 때보다는 테스트셋 정확도가 더 높이 올라가는 것 같긴 한데 아직도 충분하지는 않습니다.

으음... 아 이유를 생각해보다가 문제가 뭘까 하고 생각해봤는데 이건 아무래도 데이터셋의 문제인 것 같아요. 저번에 mnist 데이터셋 이용할 때 코드를 그대로 받아와서 만개 밖에 받아오지 않았는데, 라벨 수는 저번에 비해서 10배가 되었으니 데이터셋도 최소한 10배 (물론 더 늘어나는 게 직관적으로 맞아 보이긴 합니다.) 가 되어야 할 것 같아요.
그런 연유로 데이터셋을 늘려서 다시 돌려보겠습니다...!

keras dataset에서 제공하는 데이터는 총 5만개입니다. 트레이닝 데이터를 원래 만개를 썼었는데 이번에는 5만개를 다 넣고 돌려보았습니다. 그런데도 딱히 테스트셋의 정확도가 올라가지는 않네요. 으음 mnist 데이터셋의 정확도에 익숙해져서 그런지 28%의 정확도는 매우 만족스럽지는 않네요...ㅋㅋ

cifar 100 leaderboard가 있길래 확인해보았는데, extra dataset을 사용하지 않고 기록한 최고 정확도는 88%정도네요! 생각보다 트레이닝이 어려운 데이터였군요...ㄷㄷ 이제 제가 적당히 custom해서 정확도를 올려보는 데 집중해봐야겠네요.

다음 포스팅으로 이어가겠습니다...!

댓글 없음:

댓글 쓰기