학습의 결과를 저장하기 위한 함수
모델 형태(architecture)와 parameter를 저장
## 모델 저장(ordered dict 형태)
MODEL_PATH ="saved"
if not os.path.exists(MODEL_PATH):
os.makedirs(MODEL_PATH)
torch.save(model.state_dict(),
os.path.join(MODEL_PATH, "model.pt")) # .pt확장자
## 모델 로드
new_model = TheModelClass() # 동일한 모델일 때
# 모델 로드
new_model.load_state_dict(torch.load(os.path.join(
MODEL_PATH, "model.pt")))
# 모델 자체를 저장(모델의 architecture 저장)
torch.save(model, os.path.join(MODEL_PATH, "model_pickle.pt")) # python pickle 확장자
model = torch.load(os.path.join(MODEL_PATH, "model_pickle.pt"))
model.eval()
## 데이터 저장
...(생략)...
for epoch in range(epochs):
...(생략)...
# 단계마다 저장(EPOCHS 단위)
torch.save({
'epoch': e,
'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")
print(f'Epoch {e+0:03}: | Loss: {epoch_loss/len(dataloader):.5f} | Acc: {epoch_acc/len(dataloader):.3f}')
## 데이터 로드
checkpoint = torch.load(PATH)
model.load_state_dict(checkpoint['model_state_dict'])
optimizer.load_state_dict(checkpoint['optimizer_state_dict']
epoch = checkpoint['epoch']
loss = checkpoint['loss']