# Transform normalization

Forgive me if I misunderstand this operator. Here is the transform that I am applying:

``````output_size = 256
color_transform = transforms.Compose([
transforms.ToTensor(),
transforms.Resize((output_size, output_size), antialias=True),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
depth_transform = transforms.Compose([
transforms.ToTensor(),
transforms.Resize((output_size, output_size), antialias=True),
transforms.Normalize(mean=[0.5], std=[0.5])
])
``````

I suppose that the output value of tensor will be in the range [mean-std, mean+std], but the value that I print out is much larger/smaller. What did I do wrong?
Some context about my case. I am trying to read RGB and depth images with cv2.imread(filepath, -1) then applying the above transformation directly.

`transforms.Normalize` subtracts the provided `mean` value from the tensor and divides by `std` to create a normalized sample. The values are calculated in a way to create a zero-mean and unit-variance output. The actual values are not bound to `[mean-std, mean+std]` as seen in this example:

``````x = torch.randn(10000) * 123. + 5467
print(x.mean(), x.std())
# tensor(5469.2778) tensor(122.1908)

mean = x.mean()
std = x.std()

y = (x - mean) / std
print(y.mean(), y.std())
# tensor(-2.7153e-06) tensor(1.)
print(y.min(), y.max())
# tensor(-3.7724) tensor(3.4398)
``````
1 Like

I suppose to get the mean and std as in the formation, I should rescale the tensor value in the range of [0,1] first. Is is right?

Yes, the posted `mean` and `std` values from the `color_transform` are the ImageNet stats using the normalized inputs in the range `[0, 1]` while the second example seems like placeholder stats also for normalized inputs in `[0, 1]`.

1 Like