我对数据扩充有些困惑。如果我在训练数据集中执行数据扩充,则验证数据集应该具有相同的操作? 例如
data_transforms = {
'train': transforms.Compose([
transforms.RandomResizedCrop(224),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
]),
'val': transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
]),}
我们为什么要在“ val”数据集中进行“调整大小”和“ CenterCrop”操作?
答案 0 :(得分:1)
由于验证数据用于衡量训练模型的良好程度,因此不应在不同的训练模型之间进行更改。也就是说,我们应该使用固定的量度来评估事物。这就是为什么验证数据的扩展不包含训练数据扩展中存在的任何随机性的原因。
侧面说明:
与测试数据不同,验证数据用于调整超参数。
答案 1 :(得分:0)
我非常不同意@Yashio Yamauchi 的回答。是的,当数据集较小时,通常在训练数据集中使用数据增强来增加数据集样本的数量。 但是,在某些情况下,您的验证数据集也很小,因此您无法实际评估您的模型。
例如,假设您的任务是识别 T 恤上的徽标(例如阿迪达斯徽标),无论它们在图像上如何旋转(例如 90 度)。然后,您将不得不使用数据增强来确保您的模型使用旋转的 T 恤。但是,如果您想衡量您的模型在旋转 90 度时识别“阿迪达斯”的程度,那么您的验证数据集中还需要包含旋转 T 恤的图像。
在这种情况下,可以在训练开始之前在验证数据集中使用一次数据增强!