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만 저장했기 때문
torch.save(model, path(pt or pth))
torch.load(model_path)
모델의 arichitecture와 함께 load
모델 형태를 전부 저장하는 경우 pickle로 저장한다.
학습으 중간 결과 저장
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']
다른 데이터셋으로 만든 모델을 현재 데이터에 적용
일반적으로 대용량 데이터셋으로 만들어진 모델의 성능이 높다.
현재의 DL에서는 가장 일반적인 학습 기법
backbone architecture가 잘 학습된 모델에서 일부분만 변경하여 학습을 수행한다.
TorchVision
, HuggingFace
등을 사용한다.
# 전체 frozen
for param in my_model.parameters():
param.requires_grad = False
# 일부분만 풀어줌
for param in my_model.linear_layers.parameters():
param.requires_grad = True