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])
]),
}
我的问题是 - 选择这些变换的直觉是什么?特别是,选择
RandomResizedCrop(224)
和RandomHorizontalFlip()
的直觉是什么?让神经网络在整个图像上进行训练不是更好吗?(或者至少使用这些转换来增强数据集)我理解为什么将只包含蚂蚁/蜜蜂的部分插入神经网络是合理的,但不明白为什么插入随机裁剪是合理的...希望我的所有问题都清楚了。谢谢!
ImageFolder
通过以下步骤生成样本:1)打开文件夹中的图像文件,2)对其应用transform
并返回结果样本。这些样本不会被保存,因此每次调用都会重复执行步骤 1)和 2),参见 code。因此,如果您的transform
由随机操作组成,则每次迭代都会得到不同的增强样本。(重新打开文件并重新应用常量操作可能听起来有些反直觉,但这是处理大型数据集和数据增强的最佳方式)。 - benjaminplanche