You are right. I was not reporting the accuracy correctly. I referred to this tutorial 4 to fix my training loop. It looks like this now:
def train_val():
    
    for epoch in range(1, EPOCHS+1):
        print(f"Epoch: {epoch}/{EPOCHS}", end='\t')
        model.train()
        
        running_loss = 0
        total = 0
        correct = 0
        for data in train_loader:
            image, target = data[0], data[1]
            image, target = image.to(device), target.to(device) 
            optimizer.zero_grad()
            output = model(image)
            loss = criterion(output, target) 
            running_loss += loss.item()
            
            _, pred = torch.max(output, dim=1)
            total += target.size(0)
            correct += torch.sum(pred == target).item()
            
            loss.backward()
            optimizer.step()
        print(f"Training Loss: {running_loss/len(train_loader):.3f}\tTraining Acc: {correct/total}", end='\t')
        
        save_path = os.path.join(r"trained_models", f'{datetime.now().strftime("%m%d_%H%M%S")}_{epoch}.pth')

        if epoch % 5 == 0:
            torch.save(model.state_dict(), save_path)

        with torch.no_grad():
            
            model.eval()
            running_val_loss = 0
            total = 0
            correct = 0
            for data in val_loader:
                image, target = data[0], data[1]
                image, target = image.to(device), target.to(device) 
                output = model(image)
                val_loss = criterion(output, target)
                running_val_loss += val_loss
                _, pred = torch.max(output, dim=1)
                correct += torch.sum(pred == target).item()
                total += target.size(0)
            running_val_loss = running_val_loss/len(val_loader)
            print(f"Val Loss: {running_val_loss:.3f}\tVal Acc: {correct/total}")
            
            scheduler.step(running_val_loss)

Does it look okay to you? Especially how i am calculating losses and accuracies.
The training log also makes more sense to me now. Here it is.
Epoch: 1/50	Training Loss: 1.517	Training Acc: 0.43768	Val Loss: 1.131	Val Acc: 0.5953
Epoch: 2/50	Training Loss: 1.006	Training Acc: 0.65064	Val Loss: 0.939	Val Acc: 0.6759
Epoch: 3/50	Training Loss: 0.795	Training Acc: 0.73206	Val Loss: 0.726	Val Acc: 0.7514
Epoch: 4/50	Training Loss: 0.684	Training Acc: 0.77056	Val Loss: 0.610	Val Acc: 0.7947
Epoch: 5/50	Training Loss: 0.602	Training Acc: 0.79898	Val Loss: 0.608	Val Acc: 0.7956
Epoch: 6/50	Training Loss: 0.548	Training Acc: 0.81684	Val Loss: 0.532	Val Acc: 0.8201
Epoch: 7/50	Training Loss: 0.497	Training Acc: 0.83404	Val Loss: 0.516	Val Acc: 0.8304
Epoch: 8/50	Training Loss: 0.458	Training Acc: 0.84652	Val Loss: 0.503	Val Acc: 0.8312
Epoch: 9/50	Training Loss: 0.419	Training Acc: 0.85984	Val Loss: 0.467	Val Acc: 0.8426
Epoch: 10/50	Training Loss: 0.393	Training Acc: 0.87026	Val Loss: 0.450	Val Acc: 0.8527
Epoch: 11/50	Training Loss: 0.368	Training Acc: 0.87588	Val Loss: 0.414	Val Acc: 0.8645
Epoch: 12/50	Training Loss: 0.343	Training Acc: 0.88578	Val Loss: 0.388	Val Acc: 0.8681
Epoch: 13/50	Training Loss: 0.325	Training Acc: 0.893	Val Loss: 0.397	Val Acc: 0.867
Epoch: 14/50	Training Loss: 0.298	Training Acc: 0.89908	Val Loss: 0.380	Val Acc: 0.8731
Epoch: 15/50	Training Loss: 0.284	Training Acc: 0.90476	Val Loss: 0.355	Val Acc: 0.8803
Epoch: 16/50	Training Loss: 0.268	Training Acc: 0.91034	Val Loss: 0.370	Val Acc: 0.8766
Epoch: 17/50	Training Loss: 0.252	Training Acc: 0.9159	Val Loss: 0.353	Val Acc: 0.8792
Epoch: 18/50	Training Loss: 0.243	Training Acc: 0.91876	Val Loss: 0.368	Val Acc: 0.8841
Epoch: 19/50	Training Loss: 0.227	Training Acc: 0.92448	Val Loss: 0.366	Val Acc: 0.8833
Epoch: 20/50	Training Loss: 0.215	Training Acc: 0.92824	Val Loss: 0.329	Val Acc: 0.8939
Epoch: 21/50	Training Loss: 0.207	Training Acc: 0.93096	Val Loss: 0.342	Val Acc: 0.8909
Epoch: 22/50	Training Loss: 0.195	Training Acc: 0.93432	Val Loss: 0.352	Val Acc: 0.8924
Epoch: 23/50	Training Loss: 0.184	Training Acc: 0.93768	Val Loss: 0.353	Val Acc: 0.8857
Epoch: 24/50	Training Loss: 0.176	Training Acc: 0.94022	Val Loss: 0.370	Val Acc: 0.8905
Epoch: 25/50	Training Loss: 0.168	Training Acc: 0.94342	Val Loss: 0.343	Val Acc: 0.8927
Epoch: 26/50	Training Loss: 0.161	Training Acc: 0.94654	Val Loss: 0.334	Val Acc: 0.8984
Epoch: 27/50	Training Loss: 0.152	Training Acc: 0.94792	Val Loss: 0.358	Val Acc: 0.8945
Epoch: 28/50	Training Loss: 0.144	Training Acc: 0.95132	Val Loss: 0.316	Val Acc: 0.9014
Epoch: 29/50	Training Loss: 0.133	Training Acc: 0.95486	Val Loss: 0.348	Val Acc: 0.8997
Epoch: 30/50	Training Loss: 0.128	Training Acc: 0.95614	Val Loss: 0.363	Val Acc: 0.8961
Epoch: 31/50	Training Loss: 0.122	Training Acc: 0.9584	Val Loss: 0.326	Val Acc: 0.9001
Epoch: 32/50	Training Loss: 0.118	Training Acc: 0.9597	Val Loss: 0.326	Val Acc: 0.902
Epoch: 33/50	Training Loss: 0.119	Training Acc: 0.95974	Val Loss: 0.358	Val Acc: 0.8995
Epoch: 34/50	Training Loss: 0.109	Training Acc: 0.96328	Val Loss: 0.315	Val Acc: 0.9069
Epoch: 35/50	Training Loss: 0.103	Training Acc: 0.96464	Val Loss: 0.358	Val Acc: 0.9015
Epoch: 36/50	Training Loss: 0.095	Training Acc: 0.9675	Val Loss: 0.348	Val Acc: 0.9044
Epoch: 37/50	Training Loss: 0.094	Training Acc: 0.9682	Val Loss: 0.326	Val Acc: 0.907
Epoch: 38/50	Training Loss: 0.087	Training Acc: 0.97094	Val Loss: 0.341	Val Acc: 0.9067
Epoch: 39/50	Training Loss: 0.090	Training Acc: 0.96958	Val Loss: 0.331	Val Acc: 0.9065
Epoch: 40/50	Training Loss: 0.084	Training Acc: 0.97034	Val Loss: 0.347	Val Acc: 0.9108
Epoch: 41/50	Training Loss: 0.081	Training Acc: 0.97124	Val Loss: 0.340	Val Acc: 0.903
Epoch: 42/50	Training Loss: 0.075	Training Acc: 0.97416	Val Loss: 0.325	Val Acc: 0.9101
Epoch: 43/50	Training Loss: 0.073	Training Acc: 0.97534	Val Loss: 0.340	Val Acc: 0.9071
Epoch: 44/50	Training Loss: 0.071	Training Acc: 0.97654	Val Loss: 0.344	Val Acc: 0.91
Epoch: 45/50	Training Loss: 0.068	Training Acc: 0.977	Val Loss: 0.340	Val Acc: 0.9073
Epoch    45: reducing learning rate of group 0 to 1.0000e-03.
Epoch: 46/50	Training Loss: 0.038	Training Acc: 0.98764	Val Loss: 0.305	Val Acc: 0.9206
Epoch: 47/50	Training Loss: 0.028	Training Acc: 0.99118	Val Loss: 0.318	Val Acc: 0.9221
Epoch: 48/50	Training Loss: 0.024	Training Acc: 0.99198	Val Loss: 0.328	Val Acc: 0.9231
Epoch: 49/50	Training Loss: 0.020	Training Acc: 0.99322	Val Loss: 0.333	Val Acc: 0.9235
Epoch: 50/50	Training Loss: 0.019	Training Acc: 0.99384	Val Loss: 0.340	Val Acc: 0.9233

Does this look okay?
Also, I had following doubts in my mind.
The validation loss decreases very minimally after epoch 12. However, the validation accuracy keeps on improving till the end. But then again, it overfits by the time training ends. Around which epoch should the training should have stopped? Should I have used EarlyStopping for it or is there some other approach?
Thank you being patient with these doubts.