Regarding your first point, I am using the following line of code to generate my Dataloader and I am not using any transforms.
train_loader = torch.utils.data.DataLoader(outList, batch_size=1, shuffle=False, num_workers=0)

Please note that there is ONLY ONE image inside the outList. As for the reproducibility docs, given the size of the relative error you mentioned (~1e-6.), I do not think that is the case since my errors are bigger than that! To give you some perspective (and make sure that my query is clear enough) I would like to add that the for loop above runs ONLY ONCE and it exits the loop since there is only ONE test image inside the Dataloader. Moreover, the trained/loaded weight, bias, and batch values are constant through different runs (something we expect). It’s just the output of the model that contains different pixel values after each run. I am running the code snippet above inside a Jupyter notebook so every time I hit shift+enter to run the cell it generates a different set of results for the same single input image! Below you can see a small slice of my output after feeding the same single image in the dataloader to my trained model (i.e. just hitting shift+enter three times to run the loop above)
First run:
tensor([[ 0.6058, 0.2320, 0.0092],
[ 0.1484, -0.2899, -0.5605],
[ 0.0013, -0.4538, -0.7382]], device=‘cuda:0’)
Second run:
tensor([[-0.1410, -0.4058, -0.3253],
[-0.6349, -0.8924, -0.7446],
[-0.9760, -1.2406, -1.0597]], device=‘cuda:0’)
Third run:
tensor([[ 0.3299, 0.0792, 0.0058],
[-0.1715, -0.3860, -0.4168],
[-0.5801, -0.7737, -0.7866]], device=‘cuda:0’)
So the difference between different runs are significantly larger than ~1e-6. Also, another equally concerning error is the change of sign between different runs! Please let me know if I need to provide you with more details.