1: transform.Normalize() 函数
代码示例:
from torchvision import models, transforms
# 迁移学习,预训练模型
net = models.resnet18(pretrained=True)
# 标准化
normalize = transforms.Normalize(
mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225]
)
# 数据转换
image_transform = transforms.Compose([
# 将输入图片resize成统一尺寸
transforms.Resize([224, 224]),
# 将PIL Image或numpy.ndarray转换为tensor,并除255归一化到[0,1]之间
transforms.ToTensor(),
# 标准化处理-->转换为标准正太分布,使模型更容易收敛
normalize
])
transforms.Normalize(mean, std) 的计算公式:
input[channel] = (input[channel] - mean[channel]) / std[channel]
Normalize() 函数的作用是将数据转换为标准正太分布,使模型更容易收敛。
经过transforms.Normalize数据不一定服从正态分布!
这里减去均值,除以标准差只是将数据进行标准化处理,并不会改变原始数据的分布!
PyTorch 中我们经常看到
mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]
,是从 ImageNet 数据集的数百万张图片中随机抽样计算得到的。
2: transform.ToTensor() 函数
代码示例:
import numpy as np
from torchvision import transforms
#自定义图片数组,数据类型一定要转为‘uint8’,不然transforms.ToTensor()不会归一化
x=np.array([[[1,2,3],[4,5,6]]],dtype='uint8')
print(x)
x.shape # (1, 2, 3)
x = transforms.ToTensor()(x)
print(x)
x.shape #torch.Size([3, 1, 2])
>>>
[[[1 2 3]
[4 5 6]]]
tensor([[[0.0039, 0.0157]],
[[0.0078, 0.0196]],
[[0.0118, 0.0235]]])
1. 是将输入的数据shape H,W,C ——> C,H,W
2. 将所有数除以255,将数据归一化到【0,1】