File size: 2,257 Bytes
3352589 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
import torch
import matplotlib.pyplot as plt
from torchvision.utils import make_grid
def save_checkpoint(model, optimizer, epoch, loss, path):
torch.save({
'epoch': epoch,
'model_state_dict': model.state_dict(),
'optimizer_state_dict': optimizer.state_dict(),
'loss': loss,
}, path)
def load_checkpoint(model, optimizer, path):
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']
return model, optimizer, epoch, loss
def plot_training_curves(epochs, train_acc1, test_acc1, train_acc5, test_acc5, train_losses, test_losses, learning_rates):
plt.figure(figsize=(12, 8))
plt.subplot(2, 2, 1)
plt.plot(epochs, train_acc1, label='Train Top-1 Acc')
plt.plot(epochs, test_acc1, label='Test Top-1 Acc')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.legend()
plt.title('Top-1 Accuracy')
plt.subplot(2, 2, 2)
plt.plot(epochs, train_acc5, label='Train Top-5 Acc')
plt.plot(epochs, test_acc5, label='Test Top-5 Acc')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.legend()
plt.title('Top-5 Accuracy')
plt.subplot(2, 2, 3)
plt.plot(epochs, train_losses, label='Train Loss')
plt.plot(epochs, test_losses, label='Test Loss')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.legend()
plt.title('Loss')
plt.subplot(2, 2, 4)
plt.plot(epochs, learning_rates, label='Learning Rate')
plt.xlabel('Epoch')
plt.ylabel('Learning Rate')
plt.legend()
plt.title('Learning Rate')
plt.tight_layout()
plt.show()
def plot_misclassified_samples(misclassified_images, misclassified_labels, misclassified_preds, classes):
if misclassified_images:
print("\nDisplaying some misclassified samples:")
misclassified_grid = make_grid(misclassified_images[:16], nrow=4, normalize=True, scale_each=True)
plt.figure(figsize=(8, 8))
plt.imshow(misclassified_grid.permute(1, 2, 0))
plt.title("Misclassified Samples")
plt.axis('off')
plt.show() |