from torchvision import transforms
data_transforms = {
'train': transforms.Compose([
transforms.RandomResizedCrop(48), # 在随机大小和比例下裁剪图像,然后缩放到48x48
transforms.RandomHorizontalFlip(), # 以一定的概率水平翻转图像
transforms.ToTensor(), # 将PIL Image或numpy.ndarray转换为torch.Tensor,并缩放到[0.0, 1.0]
transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5]) # 标准化图像
]),
'val': transforms.Compose([
transforms.Resize(64), # 缩放图像到64x64
transforms.CenterCrop(48), # 从中心裁剪出48x48的区域
transforms.ToTensor(), # 将PIL Image或numpy.ndarray转换为torch.Tensor,并缩放到[0.0, 1.0]
transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5]) # 标准化图像
]),
}
训练集 ('train') 变换
transforms.RandomSizedCrop(48)
:
- 随机大小裁剪。从输入图像中随机选择一个区域进行裁剪,裁剪出的图像大小是 48x48 像素。裁剪的区域大小会在原始图像大小的某个范围内随机选择,但具体范围可能因
RandomSizedCrop
的实现或参数设置而异(注意:RandomSizedCrop
不是一个标准的 PyTorch 变换,可能是 RandomResizedCrop
的误写或某个特定库的自定义变换)。
transforms.RandomHorizontalFlip()
:
- 随机水平翻转。以 0.5 的概率对图像进行水平翻转,这有助于模型学习对图像的水平方向不敏感的特征。
transforms.ToTensor()
:
- 将 PIL 图像或 NumPy ndarray 转换为 PyTorch 的 Tensor,并将像素值从 [0, 255] 缩放到 [0.0, 1.0]。
transforms.Normalize([0.5,0.5,0.5], [0.5,0.5,0.5])
:
- 标准化。使用给定的均值和标准差对图像进行标准化。这里,均值和标准差都是
[0.5, 0.5, 0.5]
,意味着每个颜色通道(红、绿、蓝)的像素值都会减去 0.5 并除以 0.5,从而使数据具有零均值和单位方差。
验证集 ('val') 变换
transforms.Scale(64)
:
- 缩放。将图像缩放到 64x64 像素。这通常用于确保所有图像具有相同的尺寸,以便能够批量处理。
transforms.CenterCrop(48)
:
- 中心裁剪。从缩放后的图像中心裁剪出一个 48x48 像素的区域。这有助于消除缩放时可能引入的边界效应。
transforms.ToTensor()
和 transforms.Normalize([0.5,0.5,0.5], [0.5,0.5,0