Hi @ptrblck  - thanks for replying again.
I’ve tried update my code to the following:
num_epochs = 10
count = 0
loss_list = []
iteration_list = [] 
for epoch in range(num_epochs):
    for images, labels in enumerate(trainloader):
        
        # Clear gradients
        optimiser.zero_grad()
        
        # Forward propagation
        outputs = cnn(images)
        
        # Calculate loss
        loss = criterion(outputs, labels)
        
        # Calculating gradients
        loss.backward()
        
        # Update parameters
        optimiser.step()
        
        count += 1
            
            # store loss and iteration
        loss_list.append(loss.data)
        iteration_list.append(count)
            # accuracy_list.append(accuracy)
        if count % 12 == 0:
                # Print Loss
            print('Iteration: {}  Loss: {} %'.format(count, loss.data))

The output is:
Iteration: 12  Loss: 0.3102647066116333 %
Iteration: 24  Loss: 0.5342930555343628 %
Iteration: 36  Loss: 0.13416573405265808 %
Iteration: 48  Loss: 0.05583428218960762 %
Iteration: 60  Loss: 0.3329312801361084 %
Iteration: 72  Loss: 0.1474495381116867 %

I made some changes so that my len(trainloader) is now 82. However, the cell keeps running and running after Iteration: 72 is achieved. I’m not too sure why. Is there some stoppage logic I could use perhaps?
Thanks again