ai tech

CNN 개발 과정 일지

완달프 2021. 3. 30. 00:09

1주차

1. 판다스 프로파일링 설치하려고 했으나 계속 오류 발생했다.

서버를 지워버리고 다시 설치하니 오류가 사라졌다;

 

2. 데이터 셋에 사진 데이터를 집어넣긴했는데 라벨링 데이터를 함께 넣지는 못했다.

 

3. 라벨링데이터를 사진데이터와 합쳐서 구성할 수 있도록 Dataset을 구성했다.

 

2주차 첫째날

1. 내가 만든 기본 CNN 모델로 학습했더니 적중률이 10% 밖에 나오지 않았다.

옵티마이저는 아담사용, 학습률은 0.001, 배치사이즈 50

 

2. pretrained model인 efficient net b0를 가져다 썼더니 성능이 63프로로 올랐다.

옵티마이저는 SGD사용, 학습률은 0.001, 배치사이즈 64

 

3. inference를 하려고 했더니 에러가 발생했다.

DataLoader worker (pid 7435) is killed by signal: Bus error. 

학습할때는 배치사이즈가 64였는데, inference 할때 배치사이즈가 1000으로 설정되어 있어서 생기는 문제였다.

inference할때도 배치사이즈를 64로 변경했더니 정상적으로 진행되었다.

 

4. 아무래도 하이퍼파라미터 관리를 해야할것같아서 tensorboard를 설치했다. 

tensorboard 사용은 손쉬웠는데, 서버에서 다음처럼 명령어를 입력해주면,

tensorboard --logdir=model --bind_all

웹페이지 주소가 나타나면서 파라미터를 포함한 모델의 각종 정보들을 시간순으로 보여준다.

model이라는 폴더 아래를 모조리 둘러봐서 tfevents라는 파일을 갖고 분석해주는듯 하다.

 

물론 학습시에 tensorboard를 설정하고 사용할 값들을 적어줘야 하는데,

from torch.utils.tensorboard import SummaryWriter
logger = SummaryWriter(log_dir=save_dir)
logger.add_scalar("Train/loss", train_loss, epoch * len(train_loader) + idx)
logger.add_scalar("Train/accuracy", train_acc, epoch * len(train_loader) + idx)
logger.add_scalar("Val/loss", val_loss, epoch)
logger.add_scalar("Val/accuracy", val_acc, epoch)
logger.add_figure("results", figure, epoch)

위처럼 적어주면 자동적으로 진행상황을 파일에 기록하는 것 같다.

 

5. 대대적인 최적화를 진행했다.

python train.py --model Enb4Model --optimizer Adam --lr 3e-4 --epochs 30 --name enb4_Adam_0.0003_64_30

모델은 efficient net b4를 사용하고, 옵티마이저는 Adam을, lr은 3e-4, 에포크는 30이다.

텐서보드로 확인했더니 초반부부터 학습이 너무 잘됐다.

바로 inference도 진행했다.

python inference.py --model Enb4Model --model_dir ./model/enb4_Adam_0.0003_64_30

결과는 57.6349% 정확도에 f1점수는 0.4313 나왔다.

이전보다 각각 10~20프로 정도 상승한 것이다.

 

6. 기록을 살펴보니 epoch 3까지는 정확도가 상승했다.

그리고 epoch4 까지 cost가 감소했다.

그래서 이번에는 epoch를 5까지만 수행하기로했다.

그리고 epoch가 짧으니 efficient net b6를 사용해보기로 했다.

 python train.py --model Enb6Model --optimizer Adam --lr 3e-4 --epochs 5 --name enb6_Adam_0.0003_64_30

그리고 결과는 3번째 트레이닝까지만 가장 좋은 성능을 보였다.

일단, 바로 inference 진행

inference.py --model Enb6Model --model_dir ./model/enb6_Adam_0.0003_64_5

결과는 55.5397% 정확도에 f1점수는 0.4628 나왔다.

정확도는 감소했지만, f1점수는 증가한 것이다.

 

2주차 둘째날

1. augmentation을 적용했다.

랜덤 augmentation도 적용되었기 때문에 normalization 되면서 학습 속도가 줄어들것 같아서,

에포크를 늘리고 좀더 빠른 efficient net b4로 적용했다.

python train.py --augmentation CustomAugmentation --model Enb4Model --optimizer Adam --lr 3e-4 --epochs 15 --name enb4_Adam_0.0003_64_15_aug

'ai tech' 카테고리의 다른 글

ai tech 29일차  (0) 2021.03.04
ai tech 28일차  (0) 2021.03.03
ai tech 27일차  (0) 2021.03.02
ai tech 25일차  (0) 2021.02.26
ai tech 21회차  (0) 2021.02.22