[Pytorch] Transfer learning

hyunsooo·2022년 9월 28일
0

모델 파라미터 저장

torch.save(model.state_dict(), path(pt or pth)

  • 모델의 파라미터를 저장

model.state_dict()

  • 모델의 파라미터를 표시

  • 모델 로드

my_model = Model()
my_model.load_state_dict(torch.load(model_path)) # state만 저장했기 때문
  • 보통 이 방식을 사용한다.

모델 architecture와 함께 저장

torch.save(model, path(pt or pth))

  • 모델 형태(architecture)의 파라미터 저장

torch.load(model_path)

  • 모델의 arichitecture와 함께 load

  • 모델 형태를 전부 저장하는 경우 pickle로 저장한다.

checkpoints

  • 학습으 중간 결과 저장

  • earlystopping기법 사용시 이전 학습의 결과물을 저장

  • loss와 metric 값을 지속적으로 확인, 저장

  • 일반적으로 epoch, loss, metric을 함께 저장하여 확인

  • colab에서 지속적인 학습을 위해 필요


# save
torch.save({
	'epoch' : e, # epoch
    'model_state_dict': model.state_dict(),
    'optimizer_state_dict': optimizer.state_dict(),
    'loss': epoch_loss,
    },
    f"saved/checkpoint_model_{e}_{epoch_loss/len(dataloader)}_{epoch_acc/len(dataloader)}.pt")
    
# load
checkpoint = torch.load(path)
epoch = checkpoint['epoch']
model.load_state_dict(checkpoint['model_state_dict'])
optimizer.load_state_dict(checkpoint['optimizer_state_dict'])
loss = checkpoint['loss']

Transfer learning

  • 다른 데이터셋으로 만든 모델을 현재 데이터에 적용

  • 일반적으로 대용량 데이터셋으로 만들어진 모델의 성능이 높다.

  • 현재의 DL에서는 가장 일반적인 학습 기법

  • backbone architecture가 잘 학습된 모델에서 일부분만 변경하여 학습을 수행한다.

  • TorchVision, HuggingFace 등을 사용한다.

Freezing

  • Pretrained model 활용시 모델의 일부분을 학습이 안되도록 할 수 있는데 이를 frozen시킨다고 표현한다.

# 전체 frozen
for param in my_model.parameters():
    param.requires_grad = False

# 일부분만 풀어줌
for param in my_model.linear_layers.parameters():
    param.requires_grad = True
    
profile
지식 공유

0개의 댓글