구글 드라이브 + colab에서 작업했는데, 어째서인지 작업 내용이 전혀 저장되지 않아 코드 대부분이 날아갔다. 때문에 코드보다는 어떤 작업을 했고, 어떤 인사이트를 얻었는지 위주로 작성할 것이다.
학습데이터, 검증데이터, 테스트데이터 전체를 합쳐도 600장 남짓밖에 되지 않기 때문에, 학습과정에서 과대적합이 발생하기 쉽다. 때문에 ImageDataGenerator를 이용한 데이터 증강을 통해 보다 좋은 성능을 얻어보고자 하였다.
기준 모델로, 직접 모델링을 진행한 GoogLeNet 기반 모델을 이용하였다.
train_datagen = ImageDataGenerator(
rotation_range = 30,
shear_range=0.3,
horizontal_flip=True,
fill_mode='nearest',
rescale=1./255. ,
)
valid_datagen = ImageDataGenerator(
rescale=1./255. ,
)
test_datagen = ImageDataGenerator(
rescale=1./255.
)
train_generator = train_datagen.flow_from_directory(train_path,
target_size=(280, 280),
class_mode='binary',
batch_size=32,)
valid_generator = valid_datagen.flow_from_directory(val_path,
target_size=(280, 280),
class_mode='binary',
batch_size=32,)
test_generator = test_datagen.flow_from_directory(test_path,
target_size=(280, 280),
class_mode='binary',
batch_size=64
shuffle=False)
shuffle=False
를 지정하지 않으면, 순서가 뒤섞인 채로 예측을 하기 때문에, test label(y_test)과 순서가 일치하지 않게 되어 잘못된 평가 결과가 나오게 된다. 때문에 제너레이터를 사용할 경우 반드시 지정해야 한다.flow_from_directory
대신 flow
를 사용하여 이미지 데이터를 가져와도 된다.model.fit()
에서 shuffle=True
를 설정하여 매 epoch마다 학습 데이터가 섞이도록 하였다. 이를 통해 학습때마다 서로 다른 배치로 학습하여 과대적합 위험을 줄였다.그동안 프로젝트를 마무리할 때 시간에 쫓겨 내용을 잘 정리하지 못하고, 발표자료를 빈약하게 만드는 경우가 많았는데 이번엔 다양한 시도를 하였고 내용도 잘 정리할 수 있었다.
발생한 문제를 해결하고 원인을 분명하게 알고 넘어갈 수 있었다.
발표자료를 정말 열심히 만들었는데, 발표를 하지는 못하였다.
오늘 진행한 코드의 대부분이 날라갔다. 앞으로는 클라우드를 너무 믿지말고 저장이 잘 되었는지꼭 확인하자.