What transforms.Normalize((0.5,), (0.5,)) does ;
(X - mean(X) )/ std(X)

Where X is image data
Mean (X) mean pixel value of X
std(X) standard deviation of X
The normalize function normalizes your data to be with the range of (-1, 1)
So using values 0.5 as mean and standard deviation means that your dataset has been scaled to range (0, 1).
If your dataset is not scaled to range (0, 1) before normalize, the u either scale them by dividing the raw image by 255 or setting ur mean and std in normalize function to 255/2.
After the loss.backward() you school also call the optimizer.step() function those are what the backward propagation and weight update consists of.
If u did that then:
As for why your gradients don’t change without the normalize, this is the 1st time I’m hearing such
Does it change but the change is very minute and insignificant or it doesn’t change at all?