Checkpointing dalam konteks PyTorch mengacu pada penyimpanan dan pemulihan model serta status pelatihan pada titik tertentu selama pelatihan. Ini bermanfaat dalam beberapa skenario, terutama jika pelatihan model memakan waktu lama atau jika ada risiko kehilangan koneksi selama proses pelatihan. Dengan checkpoint, kalian dapat menyimpan kemajuan pelatihan model sehingga jika ada kegagalan atau perlu dilanjutkan dari titik tertentu, kalian tidak perlu memulai ulang dari awal.
Secara umum save dan loading checkpoint sudah pernah dibahas Menyimpan Check Point pada Proses Iterasi Machine Learning dengan kode singkat secara umumnya yaitu
checkpoint_dir = 'path/to/checkpoints' num_epochs = 10 for epoch in range(num_epochs): # Iterasi melalui data pelatihan for batch in train_loader: # Forward pass # Hitung loss # Backward pass # Update parameters # Simpan checkpoint pada setiap epoch checkpoint = { 'epoch': epoch, 'model_state_dict': model.state_dict(), 'optimizer_state_dict': optimizer.state_dict(), 'loss': loss.item(), } torch.save(checkpoint, f'{checkpoint_dir}/checkpoint_epoch_{epoch}.pt')
memulihkan checkpoint
# Tentukan file checkpoint yang akan dimuat checkpoint_path = 'path/to/checkpoints/checkpoint_epoch_5.pt' # Muat checkpoint checkpoint = torch.load(checkpoint_path) # Muat model dan optimizer dengan status terakhir model.load_state_dict(checkpoint['model_state_dict']) optimizer.load_state_dict(checkpoint['optimizer_state_dict']) epoch = checkpoint['epoch'] loss = checkpoint['loss']
Nilai Loss yang turun tajam setelah loading Checkpoint
Saya mendapatkan hal yang cukup aneh, ketika melakukan training model mobilenetV1 terdapat keanehan ketikan loading checkpoint seperti grafik loss berikut.
Pada grafik berikut yang smooth ketika pertama kali melakukan training
Bisa dilihat dari semula 4 menjadi turun ke 0.7 (smooth)
Sampai pada akhirnya saya melakukan save checkpoint dan loading kembali, yang terjadi adalah nilai loss tiba-tiba turun tajam tak terkendali – Nilai Loss yang turun tajam setelah loading Checkpoint
Kalian bisa lihat ketika epoch ke 33 (hasil dari loading checkpoint) nilai loss tiba2 turun menjadi 0.002
Ini agak aneh, dan belum tahu kenapa hal ini bisa terjadi demikian!
Padahal sudah mengikuti referensi
- https://stackoverflow.com/questions/54806742/the-strange-loss-fluctuation-when-loading-previous-trained-model
- https://github.com/pytorch/pytorch/issues/4333
Menurut forum tersebut hal ini karena https://discuss.pytorch.org/t/accuracy-of-the-model-drastically-drops/80388/5
Not actually, the problem was with high learning rate.
Thanks for pointing out the issue.
pun menggunakan learning rate yang rendah, tidak menghasilkan perubahan juga
https://discuss.pytorch.org/t/loss-changes-significantly-after-saving-and-loading-model/87266