model_wts  is a copy of the initial weights from Vgg16 pre-trained model. I used the load_state_dict to reload  the initial weights in each new fold. The structure of the code is as follows:
def train_model(model, criterion, optimizer, scheduler, num_epochs=5):
     model_wts = copy.deepcopy(model.state_dict())
     .....
   for fold, (train_idx, valid_idx) in enumerate(splits.split(total_set)):
         print('Fold : {}'.format(fold))
         train_sampler = SubsetRandomSampler(train_idx)
         ........
         model.load_state_dict(model_wts)
         for epoch in range(num_epochs):
             # The same code

model_ft = models.vgg16(pretrained=True)
num_ftrs = model_ft.classifier[6].in_features
model_ft.classifier[6] = nn.Linear(num_ftrs, 2)
model_ft = model_ft.to(device)
criterion = nn.CrossEntropyLoss()
optimizer_ft = optim.SGD(model_ft.parameters(), lr=0.001, momentum=0.9)
exp_lr_scheduler = lr_scheduler.StepLR(optimizer_ft, step_size=10, gamma=0.1)

train_model(model_ft, criterion, optimizer_ft, exp_lr_scheduler, num_epochs=5)

During training, either the validation accuracy is better than the training or sometimes it is constant.