Image PyTorch中的转换用于什么?

Image PyTorch中的转换用于什么?,image,input,transformation,pytorch,Image,Input,Transformation,Pytorch,我是Pytorch的新手,不是CNN的专家。 我已经用他们提供的教程成功地完成了分类器,但是我真的不明白在加载数据时我在做什么 他们为训练做了一些数据扩充和标准化,但当我试图修改参数时,代码不起作用 # Data augmentation and normalization for training # Just normalization for validation data_transforms = { 'train': transforms.Compose([ t

我是Pytorch的新手,不是CNN的专家。 我已经用他们提供的教程成功地完成了分类器,但是我真的不明白在加载数据时我在做什么

他们为训练做了一些数据扩充和标准化,但当我试图修改参数时,代码不起作用

# Data augmentation and normalization for training
# Just normalization for validation
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])
    ]),
}
我正在扩展我的培训数据集吗?我看不到数据的增加

为什么如果我修改transforms.RandomResizedCrop(224)的值,数据加载就会停止工作

我是否也需要转换测试数据集


我对他们所做的这种数据转换感到有点困惑。

转换。只需编写提供给它的所有转换即可。因此,
transforms.Compose
中的所有转换都将逐个应用于输入

列车变换
  • transforms.RandomResizedCrop(224)
    :这将从输入图像中随机提取大小为
    (224224,224)
    的补丁。因此,它可能会从左上角、右下角或两者之间的任何位置选择此路径。所以,在这一部分中,您正在进行数据扩充。此外,更改此值对模型中完全连接的层也不起作用,所以不建议更改此值
  • transforms.RandomHorizontalFlip()
    :一旦我们有了大小为
    (224224)
    的图像,我们就可以选择翻转它。这是数据扩充的另一部分
  • transforms.ToTensor()
    :这只是将输入图像转换为PyTorch张量
  • transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])
    :这只是输入数据的缩放,这些值(平均值和标准值)必须为您的数据集预先计算。也不建议更改这些值
  • 验证转换
  • 变换。调整大小(256)
    :首先将输入图像的大小调整为
    (256,256)
  • transforms.CentreCrop(224)
    :裁剪形状图像的中心部分
    (224224,224)
  • 其余的和火车一样


    附言:您可以在

    中阅读有关这些转换的更多信息。关于数据增强的含糊不清之处,我建议您参考以下答案:


    但简言之,假设您只有随机水平翻转变换,当您遍历图像数据集时,有些返回为原始图像,有些返回为翻转图像(翻转图像的原始图像不会返回)。换句话说,一次迭代中返回的图像数与数据集的原始大小相同,并且不会增加。

    您不需要输入所得到的错误。我怀疑,如果您更改
    RandomResizedCrop
    的结果图像的大小,在展平卷积部分和完全连接部分之间的特征时,您的模型将崩溃。请您详细说明为什么我们不将大小调整为224224,而是调整为256,然后进行中心裁剪?我不太清楚为什么要这样做例子。这可能是由于数据的特殊性造成的。从网络的角度来看,它期望输入的大小
    (224224)
    ,而不管输入如何转换。因此,在一次迭代(或一批)中,组合中的所有转换肯定应用于每个样本?或者它是否像在一次迭代中应用的任何一个(或少数)转换一样?compose中的所有转换都应用于所有输入