글쟁이, 코딩한다

0129 / k_digital 37일차 / 세미프로젝트3 본문

나는 코딩도 한다/TIL

0129 / k_digital 37일차 / 세미프로젝트3

Algori 2021. 1. 29. 23:48

0.

 Simpson Character Classifier 2일차

 

 

1. 같은 구조, 다른 모델?
 헐겁게 짜여진 모델 구조로는 돌릴 때마다 변동이 크다?

  => 나는 테스트 데이터 대상 정답 평균(accuracy)이 99.45% 나온 반면 다른 분들은 90% ~ 로 다르게 나왔다.

  초기화가 다르게 잡혀서 그랬을까? 운일까?

 

 일단 다음 차례로 넘어간다.
 

2. 시각화

시각화를 위해 generator에서 이미지 파일, class_name 등을 찾느라고 오랜 시간을 썼다.
  => 처음에는 모델이 예측한 결과값과 generator를 비교하려 했으나 generator가 매번 랜덤으로 섞이는 바람에 이건 의미가 없어졌다. 애초에 흐르는 물과 고인 물을 비교하려 했으니 접근방법부터가 문제. 해서 찾아놓은 모델을 곧바로 예측하고 값을 비교하도록 조정했다. 높은 accuracy 덕분이지 돌리는 족족 맞아서 매우 기분이 좋아짐.

모델이 예측한 캐릭터(predict)와 실제 캐릭터 비교(true)

 

3. ??


하지만 구글에서 새로운 이미지들을 찾아서 밀어넣어보니 도무지 맞추지를 못했다.

  homer는 bart로, bart는 moe로, lisa는 ned로... 99%인데 왜?
 
문제점

 

  사실은! 애초에 overfitting된 모델.

  학습하는 와중 validation data로 test data를 밀어넣어버리는 실수를 했다. (test data를 validation 용으로 쓸 수도 있다. 다만 모델 성능 평가는 다른 이미지로 한다는 전제 하에!) test data는 매우 잘 맞췄기 때문에 문제가 없다 생각했지만, 해당 데이터는 이미 모델에서 학습한 데이터였을뿐이다. 알고 있는 데이터를 또 맞추는데 실수를 0.5%나 하는 컴퓨터가 바보다.

 

1) validation data를 새로 조정


 validation generator를 추가로 생성(팀원분이 빠르게 찾아주셨다)

train_datagen = ImageDataGenerator(rescale=1./255,
                                   validation_split = 0.2) #일정비율 나누기
                                   
train_generator = train_datagen.flow_from_directory(
    "D:\\simpsons_dataset_new\\simpson_dataset", #경로
    target_size=(256, 256),
    batch_size=32,
    subset='training', #training 데이터로 지정
    class_mode='categorical')
    
val_generator = train_datagen.flow_from_directory(
    "D:\\simpsons_dataset_new\\simpson_dataset", #경로
    target_size=(256, 256),
    batch_size=32,
    subset='validation', #validation 데이터로 지정
    class_mode='categorical')


 2) overfitting을 막기 위한 코드 수정

 

  1-ImageDataGenarator에서 Data Augmentation(데이터를 약간씩 비틀어 학습한다) 설정들 넣어주기

 #진짜 유용한 메서드다

  2-dropout 추가

 

  수정하고 돌리니 accuracy는 대강 50~70%. (팀원마다 파라미터들이 달라 편차가 컸다) 다중 클래스 분류 문제에서 70% 정도면 꽤 높은 수치이지만, 이제 모델을 조정할 필요가 확실히 생긴 셈이다. 

 

  조정 방법

 1) target size 수정

 2) layer 추가

 3) filter 변경

 4) activation 함수 바꾸기

 5) optimizer 바꾸기

 6) epochs 늘리기 

...etc...


  target사이즈 올리고 하다 보니 모델이 돌아가는데 1시간씩 걸린다. 아마 주말동안에는 batch size를 조정해서 좀 빨리 돌아가도록 해야겠다. 

 

또 다른 시간에 한 일들

  ++ 주피터노트북 코드 정리(여러 사람 코드를 모아두다보니 자잘한 오류들이 계속 나왔다. 그래두 중간중간 조정을 해서 그런지 아주 오래 걸리지는 않았다)
  ++ ppt 얼개 작성
  ++ ImageDataGenarator 공부하는데 시간을 거의 다 쓴 듯 하다. 이미지 딥러닝에서 정말 유효한 도구인만큼 잘 알아두면 좋겠다.
 


  오늘의 프로젝트


  여러명이 열심히 하다보면 참 많은 것들이 달라지나 싶었다. 여러명이 있어도 대강 하면 아무것도 안 달라지는 것도 자주 봤는데 말이다. 어쩌면 나는 그게 익숙해서 여러 명이 모이면 대강 할 일만 하는 것에 익숙해지지는 않았는지 돌아보게 됐다.

 

  주말에 해야 하(긴 하는데 할 지 안 할 지는 아직 미지수인) 일들

 

  1) 웹 프론트엔드 공부 심화 과정

  2) ML 모델 값들을 모아 비교하기 & 시각화

  3) 딥러닝 모델 많이많이 돌리기

Comments