transforms作用
数据并不总是以训练机器学习算法所需的最终处理形式出现。 我们使用transforms对数据进行一些操作,使其适合于训练。
所有的TorchVision数据集都有两个参数—transform用于修改特性和target_transform用于修改标签—它们接受包含转换逻辑的可调用对象。 torchvision.transforms模块提供了几种常用的开箱即用的转换。
FashionMNIST功能是PIL Image格式,标签是整数。 对于训练,我们需要特征作为归一化张量,而标签作为one-hot独热编码张量。 为了进行这些变换,我们使用ToTensor和Lambda。
ToTensor()
ToTensor将PIL image或NumPy ndarray转换为FloatTensor。 并将图像像素强度值缩放到[0,1]
PIL Image -> PIL是由Fredrik Lundh及其贡献者开发的Python图像库。
Tensor Image -> shape是(C, H, W)的一个tensor,C是通道数,H和W分别为图像的高和宽。批量的Tensor Images即(B, C, H, W)的一个tensor,B是批量化处理中的图像数量。
张量像值的期望范围隐式地由张量dtype定义。 具有浮点型dtype的张量图像的值应该是[0,1]。具有整型dtype的张量图像的值应该是[0,MAX_DTYPE],其中MAX_DTYPE是该d类型可以表示的最大值。
Pad
Pad变换用一些像素值填充图像边界。 Pad的使用方法:
CLASS torchvision.transforms.Pad(padding, fill=0, padding_mode=‘constant’)
- padding: int 或sequence 在每个边界填充。 如果提供了一个int,它将用于填充所有边界。 如果提供了长度为2的序列,这分别是左/右和顶部/底部的填充。 如果提供了一个长度为4的序列,这分别是左、上、右和下边框的填充。
- fill :固定填充的像素填充值。 默认值为0。 如果是长度为3的元组,则分别填充R、G、B通道。 该值仅在padding_mode为常量时使用。 torch张量只支持数字。 PIL Image只支持int或tuple值。
- padding_mode: padding的类别. constant, edge, reflect or symmetric. 默认值constant.
padded_imgs = [T.Pad(padding=padding)(orig_img) for padding in (3, 10, 30, 50)]
plot(padded_imgs)
Resize
将图片短边缩放至x,长宽比保持不变。尺寸指的是像素点的多少。
期望的输出大小。 如果size是一个像(h, w)这样的序列,输出大小将与此匹配。 如果size是int,图像的较小边缘将匹配到这个数字。 例如,如果height > width,则图像将被重新缩放为(size * height / width, size)。
…
Lambda
Lambda转换应用任何用户定义的Lambda函数。 这里,我们定义了一个函数来将整数转换为一个单热编码张量。 它首先创建一个大小为10的零张量(数据集中标签的数量),并调用scatter_,它在标签y给出的索引上赋值为1。
target_transform = Lambda(lambda y: torch.zeros(
10, dtype=torch.float).scatter_(dim=0, index=torch.tensor(y), value=1))