一、transforms运行机制
在我们配置conda环境时,安装了torch和torchvision。其中的torchvision就是计算机视觉工具。
在torchvision中有几个比较重要的方法:
torchvision.transforms:常用的图像预处理方法
torchvision.datasets:常用的数据集dataset实现(提供了常用的数据集),如MNIST,CIFAR-10,ImageNet等
torchvision.model:提供了常用的网络模型
在transforms中提供了大量的图像数据预处理的方法,如数据中心化、数据标准化、缩放、裁剪、旋转、翻转、填充、噪声增加、灰度变化、线性变换、仿射变换、亮度等
代码展示:
from torchvision import transforms
norm_mean = [0.485, 0.456, 0.406]
norm_std = [0.229, 0.224, 0.225]
# 三个最基本的转换
train_trans = transforms.Compose([
transforms.Resize((32, 32)), # 将图像形状调整为输入网络模型的大小
transforms.RandomGrayscale(0.9), # 随机90%的图像 灰度化处理
transforms.ToTensor(), # 转换为张量并进行归一化操作
transforms.Normalize(norm_mean, norm_std) # 进行标准化
])
在Dataset处理图像数据中,transforms作用在__getitem__方法中。
二、数据标准化
对数据进行标准化的原因是标准化后会加快模型的收敛
transforms.Normalize(mean, std, inplace=False)
功能:逐通道(channel)的对图像进行标准化
output = (input - mean)/ std
参数:
mean:各通道的均值
std:各通道的标准差
inplace:是否原地操作(也就是否在原内存地址进行操作,是否开辟新的内存空间)