How to display the graph from the code

I am trying to plot the graph of validation loss against no of epochs. I have managed to train my data with the no of epochs. However, I have difficulty deciding which variables to use to display the graph.

Attached below are my codes:

import torch
import torch.nn as nn
from torchvision.datasets import ImageFolder
from torchvision import transforms
import torchvision.models as models
from torch.utils.data import Dataset, DataLoader 
import os
import numpy as np
from tqdm import tqdm
from PIL import Image

class FoodDataset(Dataset):
    def __init__(self, file, transform=None, mode='train'):
        self.transforms = transform
        self.mode = mode
        with open(file, 'r') as f:
            self.image_list = f.readlines()

    def __len__(self):
        return len(self.image_list)

    def __getitem__(self, index):
        label = None
        if self.mode == 'train':
            image, label = self.image_list[index].split('\n')[0].split('\t')
            label = int(label)
        else:
            image = self.image_list[index].split('\n')[0]
        image = Image.open(image).convert('RGB')
        image = self.transforms(image)
        if self.mode == 'train':
            return image, label
        else:
            return image

transforms_train = transforms.Compose([
                transforms.Resize((224, 224)),
                transforms.RandomHorizontalFlip(p=0.5),
                transforms.RandomVerticalFlip(p=0.5),
                transforms.Pad(10, 10),
                transforms.RandomRotation(45),
                transforms.RandomCrop((224, 224)),
                transforms.ColorJitter(brightness=0.5, contrast=0.5, saturation=0.5),
                transforms.ToTensor(),
                transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
            ])

transforms_test = transforms.Compose([
                transforms.Resize((224, 224)),
                transforms.ToTensor(),
                transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
            ])

def evaluate(prediction, ground_truth):
    num_correct = (np.array(prediction) == np.array(ground_truth)).sum()
    return num_correct / len(prediction)

train_ds = FoodDataset('data/train.txt', transform=transforms_train)
val_ds = FoodDataset('data/val.txt', transform=transforms_test)
test_ds = FoodDataset('data/test.txt', transform=transforms_test)

train_dl = DataLoader(train_ds, batch_size=32, shuffle=True)
val_dl = DataLoader(val_ds, batch_size=32, shuffle=True)
test_dl = DataLoader(test_ds, batch_size=32, shuffle=True)

num_classes = 5
train_model = models.resnet50(pretrained=True)
train_model.fc = nn.Linear(2048, num_classes)

output_dir = 'checkpoint'
if output_dir and not os.path.exists(output_dir):
    os.makedirs(output_dir)
device = 'cuda' if torch.cuda.is_available() else 'cpu'
ce_loss = CrossEntropyLabelSmooth(num_classes = num_classes, device = device)
optimizer = torch.optim.Adam(train_model.parameters(), lr=0.001)
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=20, gamma=0.1)

for param in train_model.parameters():
    param.requires_grad = False
for param in train_model.fc.parameters():
    param.requires_grad = True
for i in range(5):
    train_model.train()
    train_model.to(device)
    for img, label in tqdm(train_dl):
        img = img.to(device)
        label = label.to(device)
        optimizer.zero_grad()
        output= train_model(img) 
        loss = ce_loss(output, label) 
        loss.backward()
        optimizer.step()

for param in train_model.parameters():
    param.requires_grad = True
epoch = 100
highest_acc = {'epoch': 0, 'accuracy': 0}
for ep in range(epoch):
    train_model.train()
    train_model.to(device)
    count = 0
    running_loss = 0.0
    validation_loss = 0.0
    output_list = []
    ground_truth_list = []
    for img, label in tqdm(train_dl):
        img = img.to(device)
        label = label.to(device)
        optimizer.zero_grad()
        output= train_model(img)
        loss = ce_loss(output, label)
        count += 1
        prediction = torch.argmax(output, dim=1)
        output_list.extend(prediction.detach().cpu())
        ground_truth_list.extend(label.cpu())
        running_loss += loss.item()
        loss.backward()
        optimizer.step()
    
    scheduler.step()
        
    if ep % 10 == 0:
        torch.save(train_model.state_dict(), output_dir + '/resnet50_' + str(ep) + '.pth')
        
    accuracy = evaluate(output_list, ground_truth_list)
    
    print(f'Epoch[{ep}] training accuracy: {accuracy} '
            f'training loss: {running_loss / count:.3e} Base Lr: {optimizer.param_groups[0][lr]:.5e}')

    if ep % 10 == 0:
        train_model.eval()
        count = 0
        output_list = []
        ground_truth_list = []
        for img, label in tqdm(val_dl):
            with torch.no_grad():
                img = img.to(device)
                lbl = label.to(device)

                output= train_model(img)

                val_loss = ce_loss(output, lbl)

                validation_loss += val_loss.item()
                count += 1
                prediction = torch.argmax(output, dim=1)
                output_list.extend(prediction.detach().cpu())
                ground_truth_list.extend(label)
        accuracy = evaluate(output_list, ground_truth_list)
        if accuracy  highest_acc['accuracy']:
            highest_acc['accuracy'] = accuracy
            highest_acc['epoch'] = ep
        print(f'Accuracy: {accuracy}    Epoch:{ep}')

torch.save(train_model.state_dict(), output_dir + '/resnet50_' + 'final' + '.pth')
print('highest_acc: {}  epoch: {}'.format(highest_acc['accuracy'], highest_acc['epoch']))

And this is the part of output for the training of data:

100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [00:4600:00,  2.91s/it]
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [00:4700:00,  2.97s/it]
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [00:4800:00,  3.03s/it]
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [00:4800:00,  3.06s/it]
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [00:5100:00,  3.24s/it]
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2100:00,  8.87s/it]
  0%|                                                                                            | 0/5 [00:00?, ?it/s]
Epoch[0] training accuracy: 0.508 training loss: 1.537e+00 Base Lr: 1.00000e-03
100%|████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:1300:00,  2.74s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Accuracy: 0.24    Epoch:0
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:1700:00,  8.61s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[1] training accuracy: 0.478 training loss: 1.415e+00 Base Lr: 1.00000e-03
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2600:00,  9.13s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[2] training accuracy: 0.588 training loss: 1.249e+00 Base Lr: 1.00000e-03
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2500:00,  9.07s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[3] training accuracy: 0.578 training loss: 1.234e+00 Base Lr: 1.00000e-03
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2500:00,  9.12s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[4] training accuracy: 0.68 training loss: 1.008e+00 Base Lr: 1.00000e-03
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2400:00,  9.05s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[5] training accuracy: 0.684 training loss: 1.016e+00 Base Lr: 1.00000e-03
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2500:00,  9.07s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[6] training accuracy: 0.74 training loss: 9.123e-01 Base Lr: 1.00000e-03
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2400:00,  9.06s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[7] training accuracy: 0.776 training loss: 8.814e-01 Base Lr: 1.00000e-03
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2400:00,  9.02s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[8] training accuracy: 0.834 training loss: 7.780e-01 Base Lr: 1.00000e-03
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2400:00,  9.03s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[9] training accuracy: 0.818 training loss: 7.954e-01 Base Lr: 1.00000e-03
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2600:00,  9.15s/it]
  0%|                                                                                            | 0/5 [00:00?, ?it/s]
Epoch[10] training accuracy: 0.814 training loss: 8.040e-01 Base Lr: 1.00000e-03
100%|████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:1400:00,  2.94s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Accuracy: 0.7333333333333333    Epoch:10
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2600:00,  9.16s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[11] training accuracy: 0.794 training loss: 8.246e-01 Base Lr: 1.00000e-03
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2500:00,  9.11s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[12] training accuracy: 0.826 training loss: 7.713e-01 Base Lr: 1.00000e-03
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2500:00,  9.12s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[13] training accuracy: 0.804 training loss: 8.207e-01 Base Lr: 1.00000e-03
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2500:00,  9.09s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[14] training accuracy: 0.812 training loss: 7.783e-01 Base Lr: 1.00000e-03
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2400:00,  9.04s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[15] training accuracy: 0.854 training loss: 7.252e-01 Base Lr: 1.00000e-03
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2400:00,  9.04s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[16] training accuracy: 0.904 training loss: 6.477e-01 Base Lr: 1.00000e-03
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2500:00,  9.09s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[17] training accuracy: 0.866 training loss: 7.167e-01 Base Lr: 1.00000e-03
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2500:00,  9.12s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[18] training accuracy: 0.912 training loss: 6.252e-01 Base Lr: 1.00000e-03
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2400:00,  9.06s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[19] training accuracy: 0.896 training loss: 6.408e-01 Base Lr: 1.00000e-04
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2500:00,  9.06s/it]
  0%|                                                                                            | 0/5 [00:00?, ?it/s]
Epoch[20] training accuracy: 0.924 training loss: 5.846e-01 Base Lr: 1.00000e-04
100%|████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:1400:00,  2.93s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Accuracy: 0.8333333333333334    Epoch:20
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2600:00,  9.18s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[21] training accuracy: 0.958 training loss: 5.364e-01 Base Lr: 1.00000e-04
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2500:00,  9.12s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[22] training accuracy: 0.972 training loss: 5.165e-01 Base Lr: 1.00000e-04
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2400:00,  9.05s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[23] training accuracy: 0.978 training loss: 5.085e-01 Base Lr: 1.00000e-04
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2700:00,  9.24s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[24] training accuracy: 0.974 training loss: 5.058e-01 Base Lr: 1.00000e-04
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:3100:00,  9.45s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[25] training accuracy: 0.968 training loss: 5.132e-01 Base Lr: 1.00000e-04
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2500:00,  9.11s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[26] training accuracy: 0.976 training loss: 5.145e-01 Base Lr: 1.00000e-04
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2500:00,  9.09s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[27] training accuracy: 0.968 training loss: 5.000e-01 Base Lr: 1.00000e-04
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2600:00,  9.17s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[28] training accuracy: 0.974 training loss: 4.990e-01 Base Lr: 1.00000e-04
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2500:00,  9.11s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[29] training accuracy: 0.972 training loss: 4.974e-01 Base Lr: 1.00000e-04
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2500:00,  9.12s/it]
  0%|                                                                                            | 0/5 [00:00?, ?it/s]
Epoch[30] training accuracy: 0.974 training loss: 4.975e-01 Base Lr: 1.00000e-04
100%|████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:1400:00,  2.93s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Accuracy: 0.8333333333333334    Epoch:30
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2600:00,  9.13s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[31] training accuracy: 0.99 training loss: 4.778e-01 Base Lr: 1.00000e-04
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2600:00,  9.16s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[32] training accuracy: 0.982 training loss: 4.720e-01 Base Lr: 1.00000e-04
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2600:00,  9.13s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[33] training accuracy: 0.986 training loss: 4.751e-01 Base Lr: 1.00000e-04
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2600:00,  9.16s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[34] training accuracy: 0.984 training loss: 4.772e-01 Base Lr: 1.00000e-04
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2700:00,  9.19s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[35] training accuracy: 0.99 training loss: 4.737e-01 Base Lr: 1.00000e-04
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2600:00,  9.14s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[36] training accuracy: 0.986 training loss: 4.732e-01 Base Lr: 1.00000e-04
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2700:00,  9.20s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[37] training accuracy: 0.99 training loss: 4.709e-01 Base Lr: 1.00000e-04
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2400:00,  9.01s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[38] training accuracy: 0.986 training loss: 4.616e-01 Base Lr: 1.00000e-04
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2400:00,  9.03s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[39] training accuracy: 0.984 training loss: 4.748e-01 Base Lr: 1.00000e-05
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2600:00,  9.15s/it]
  0%|                                                                                            | 0/5 [00:00?, ?it/s]
Epoch[40] training accuracy: 0.986 training loss: 4.639e-01 Base Lr: 1.00000e-05
100%|████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:1400:00,  2.92s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Accuracy: 0.86    Epoch:40
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2500:00,  9.08s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[41] training accuracy: 0.996 training loss: 4.596e-01 Base Lr: 1.00000e-05
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2500:00,  9.07s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[42] training accuracy: 0.988 training loss: 4.670e-01 Base Lr: 1.00000e-05
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2500:00,  9.07s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[43] training accuracy: 0.992 training loss: 4.533e-01 Base Lr: 1.00000e-05
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2500:00,  9.12s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[44] training accuracy: 0.994 training loss: 4.551e-01 Base Lr: 1.00000e-05
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2500:00,  9.11s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[45] training accuracy: 0.992 training loss: 4.514e-01 Base Lr: 1.00000e-05
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2400:00,  9.05s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[46] training accuracy: 0.994 training loss: 4.599e-01 Base Lr: 1.00000e-05
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2500:00,  9.11s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[47] training accuracy: 0.988 training loss: 4.629e-01 Base Lr: 1.00000e-05
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2800:00,  9.31s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[48] training accuracy: 0.992 training loss: 4.553e-01 Base Lr: 1.00000e-05
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2900:00,  9.34s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Epoch[49] training accuracy: 0.988 training loss: 4.710e-01 Base Lr: 1.00000e-05
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2500:00,  9.10s/it]
  0%|                                                                                            | 0/5 [00:00?, ?it/s]
Epoch[50] training accuracy: 0.994 training loss: 4.548e-01 Base Lr: 1.00000e-05
100%|████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:1400:00,  2.86s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]
Accuracy: 0.8733333333333333    Epoch:50
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [02:2600:00,  9.16s/it]
  0%|                                                                                           | 0/16 [00:00?, ?it/s]

Hope that someone can enlighten me on this. Thank you so much!

Topic epochs matplotlib machine-learning

Category Data Science

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.