Transform的normalize参数含义
注:在此之前transforms.ToTensor()已经把数据落在0、1区间了
⽐如原来的tensor是三个维度的,值在0到1之间,那么经过以下变换之后就到了-1到1区间。
transforms.Normalize((.5,.5,.5),(.5,.5,.5))
原本以为第⼀个参数应该是(0,0,0)才是归⼀化到均值为0。但是通过transforms的源码发现:
input[channel] = (input[channel] - mean[channel]) / std[channel]
也就是说((0,1)-0.5)/0.5=(-1,1)。
常见疑问
在pytorch的官⽅教程⾥,经常看到
normalize = T.Normalize(mean = [0.485, 0.456, 0.406],
std = [0.229, 0.224, 0.225])
图⽚的RGB的范围不是[0,255]吗,那么图⽚的3个通道的像素值不应该是[0,255]吗?那么⽤这样的归⼀化参数怎么能归⼀化到[-1,1]呢?
解答
第⼀种情况:就是在加载数据集的时候就已经将图⽚转换为[0,1],例如imageNet数据集就是在加载ImageNet的数据的时候就转换成[0,1]。
第⼆种情况:应⽤了ansforms.ToTensor,其作⽤是
( Converts a PIL Image or numpy.ndarray (H x W x C) in the range [0, 255] to  a torch.FloatTensor of shape (C x H x W) in the range [0.0, 1.0] )
所以我们常常在代码中看到normallize在ToTensor之后
"train": transforms.Compose([transforms.RandomResizedCrop(224),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transform和convert的区别
transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))]),
参考⾃:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。