There are random factors at play. How you batch your data, how you initialise your weights etc. To get the same result you can seed all the things that are random. torch.manual_seed(0) for example. You might have to do that for numpy, torch.cuda and other libraries using random