It seems you are shuffling the targets here:
target_list = target_list[torch.randperm(len(target_list))]

but I cannot see any code, which applies the same shuffling to the data.
Are you sure you are not breaking the correspondence between each data sample and the target?