【开发工具】PyTorch数据变换操作

在训练神经网络之前,数据是不可或缺的一部分,数据操作主要包括数据预处理(正则化、增强),数据读取和数据加载,下面按照这个顺序依次学习一下。
首先是数据的预处理,这里主要是使用torchvision.transforms这个模块,内部实现一些基本图像变换使用PIL模块实现。常用的主要包括以下几种方式:

import torchvision.transforms as T

# 缩放,第一个参数为尺寸,第二个参数为插值方式
T.Resize(size, interpolation=2)

# 中心裁剪,参数为尺寸
T.CenterCrop(size) 

# 随机裁剪,第一个参数为尺寸,第二个参数为边缘填补值
T.RandomCrop(size, padding=0) 

# 随机水平翻转,概率为0.5
T.RandomHorizontalFlip() 

# 随机垂直翻转,概率为0.5
T.RandomVerticalFlip() 

# 随机大小和随机图片比例的裁剪
T.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(3/4, 4/3), interpolation=2)

# 转为灰度图,输出图片可以使单通道或三通道
T.Grayscale(num_output_channels=1)

# 随机将图片转为灰度图,默认概率为0.1
T.RandomGrayscale(p=0.1)

# 下面两个函数主要是对图片做不同位置的裁剪,只不过这些位置都是固定的,具体可以参考官网文档
T.FiveCrop(size)
T.TenCrop(size, vertical_flip=False)

# 图像的边缘填补
# 第一个参数可以有多种可能,当为int时,上下左右padding相同,当输入size为2的tuple时,则上下和左右分别做padding,当输入size为4的tuple时,则上下左右各自做padding
# 第二个参数默认为0,如果输入size为3的tuple,则分别填充RGB通道
T.Pad(padding, fill=0)

# 图像的随机色彩变化
# brightness_factor会随机从[1-brightness, 1+brightness]范围内生成,且不小于0
# contrast_factor会随机从[1-contrast, 1+contrast]范围内生成,且不小于0
# saturation_factor会随机从[1-saturation, 1+saturation]范围内生成,且不小于0
# hue_factor会随即从[-hue, hue]范围内生成,且不小于0,不大于0.5
T.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)

# 图像的标准化(减均值,除方差),按通道做标准化,所以输入参数通道数需要与图像通道数相同
T,Normalize(mean, std)

# 类型转换
T.ToTensor() # 将PILImage或ndarry转换为tensor,取值范围从[0, 255]变为[0.0, 1.0]
T.ToPILImage(mode=None) # 将tensor或ndarry转换为PILImage,取值范围不变,参数使用参考官网

有了上面这些后,只要对训练集和测试集分别定义两个变换函数,将我们所需要的变换类型集合到一起,统一对输入数据进行处理,这时候需要用到 torch.transformation.Compose

import torchvision.transforms as T
def train_transform(x):
	return T.Compose([
			T.Resize(100),
			T,RandomHorizontalFlip(),
			T.ToTensor(),
			T,Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
			])(x)
def test_transform(x):
	return T.Compose([
			T.ToTensor(),
			T.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
			])

你可能感兴趣的:(深度学习,开发工具,深度学习,pytorch)