PyTorch - save/load - Checkpoint for Fine Tuning model
Per effettuare un Fine Tuning dei modelli รจ possibile salvare i weights e bias calcolati nella fase di training in modo da poter poi caricarli nel modello per poter effettuare un nuovo training per avere un modello con una maggiore accuracy o per suddividere il training in diverse elaborazioni quando queste sono particolarmente oneroso in tempo e risorse.

Sotto un esempio di salvataggio relativo al GAN con 2 modelli, un Encoder ed un Decoder.

Glossario
G = generatore
D = discriminatore
optimizerG = optimizer per il generatore
optimizerD = optimizer per il discriminatore
lossG = loss function per il generatore
lossD = loss function per il discriminatore

Operazione da eseguire per salvare i dati.
torch.save({
'epoch': epoch,
'generator_state_dict': G.state_dict(),
'discriminator_state_dict': D.state_dict(),
'optimizerG_state_dict': optimizerG.state_dict(),
'optimizerD_state_dict': optimizerD.state_dict(),
'lossG': lossG,
'lossD': lossD,
}, 'path/name_file.pth')
Comando per caricare i weights ed i bias nello state dictionary, i parametri dell'optimizer e della funzione di cost function.
if device == "cpu" :
checkpoint = torch.load('path/name_file.pth', map_location=torch.device('cpu'))
else:
checkpoint = torch.load('path/name_file.pth')

# load model weights state_dict
discriminator.load_state_dict(checkpoint['D_state_dict'])
generator.load_state_dict(checkpoint['G_state_dict'])

# load trained optimizer state_dict
optimizerG.load_state_dict(checkpoint['optimizerG_state_dict'])
optimizerD.load_state_dict(checkpoint['optimizerD_state_dict'])

# load trained number of epochs
epochs = checkpoint['epoch']

# load loss function
lossD = checkpoint['lossD']
lossG = checkpoint['lossG']