That’s not bad at all and good debugging! 
Could you use:
val_dataloader = DataLoader(val_dataset,
                        shuffle=False,
                        num_workers=4,
                        batch_size=1
                       )

for idx, (inputs, labels) in enumerate(val_dataloader):
    print(idx)
    inputs = inputs.cuda()
    labels = labels.cuda()

to get the index where the “bad” sample is created?
Once you get this index, try to use it in the Dataset via:
data, labels = val_dataset[idx]
data, labels = data.cuda(), labels.cuda()

which should also create the same error and look into the data loading in Dataset.__init__, why this sample is creating this str object.
Let me know, if you get stuck.