pre-trained VGG를 사용한 blood cell classification (2) 본문

ML & DL/이것저것..

pre-trained VGG를 사용한 blood cell classification (2)

eremo2002 2019. 1. 8. 17:18

이전에 pretrained model을 사용하되 conv layer는 프리징시키고 F.C layer만 업데이트 되도록 했더니 오버피팅이 심하게 나타났다.

이번에도 사전학습된 모델을 불러오지만 conv layer도 학습이 가능하도록 수정하였다. (trainable 변수만 바꾸면 된다.)

현재 파라미터들이 이미지넷 데이터셋에 최적화된 값으로 초기화되어 있으므로 다른 초기화 기법을 적용하지 않았다.

F.C layer는 저번처럼 새로 이어 붙여서 학습이 가능하게 하였다.





다른 도메인이지만 이미 파라미터들이 feature를 잘 추출해내는 어떤 값으로 초기화되어 있다. 그렇다면 다른 도메인에서도 그 성능을 발휘할 수 있을까? 다시 말해, iteration을 조금만 하고도 빠르게 수렴할 수 있을까?

이번에는 왠지 그럴 것 같았다. 왜냐하면 특정 도메인에서 classification 문제를 많이 풀었던 아이에게 전혀 다른 도메인에서도 분류 문제를 풀게하면 아예 처음 배우는 아이보다 학습능력이 더 빠르지 않을까?라고 생각했기 때문이다.





처음에 초기화가 잘 되었던 탓인지 운이 좋았던 것인지 잘 모르겠으나 시작부터 정확도가 굉장히 높은 수치로 나왔고 training acc는 얼마 안가 100%에 근접하였으며 validation acc 역시 금방 90%까지 올라왔다. 그러나 그래프를 보면 알 수 있듯이 대략 80에폭 뒤 training, validation 할 거 없이 둘다 바닥으로 곤두박질쳤다. 처음에 정확도가 굉장히 높게 나오고 계속 올라가는 것 같아서 역시 예상했던대로 학습이 잘 진행되고 있다고 생각했는데 끝나고 보니 결과가 완전히 처참했다. 


왜 이렇게 갑자기 곤두박질쳤을까?? 적어도 오버피팅이 된다면 training acc는 이렇게 내려가지 않을 것 같은데 수렴해가는 과정에서 뭔가 잘못된 위치로 간 것 같다. 같은 조건에서 실험을 더 해봐야겠다.
















같은 조건으로 돌린 두 번째 결과




이번에는 train loss가 튀지않고 안정적으로 지속적으로 떨어졌다. 따라서 train acc는 얼마 뒤 100%를 찍었다.

생각보다 너무 빨리 100%를 찍어서 놀랐다. 이미 최소값으로 수렴됐기 때문에 validation acc 역시 더 이상 변하지 않는다.

일단 예상했던대로 결과가 나온 것 같아서 다행이지만 첫 번째 실험에서 나온 결과는 운이 나쁜지 몰라도 잘못된 방향으로 이동하다보니 완전 엉뚱한 곳으로 간 것 같다. 조금 더 분석해봐야겠다.



이미지넷으로 사전학습된 네트워크를 이용해서 파라미터를 프리징시켰을 때보다 더 빠르게 수렴했고 validation performance도 훨씬 높다.

겨우 두 번 돌려본 것 가지고 확신하긴 힘들지만 아마도 blood cell이라는 도메인에 맞게 feature를 잘 추출해낼 수 있도록 파라미터가 업데이트 되었기 때문에 가능한 것 같다.








Comments