转换中的数据标准化,然后在 ResNet50 pytorch 中进行批量标准化

问题描述 投票:0回答:1

我有一个关于标准化的问题。我目前在图像数据集上使用 pytorch ResNet50 进行训练的方法如下:

第一步:我计算整个数据集的平均值和标准差,然后使用以下代码对pytorch的ImageFolder中的图像进行标准化:-

  data_transform = transforms.Compose([
    transforms.Resize(input_size),
    transforms.RandomHorizontalFlip(),
    transforms.ColorJitter(0.1,0.1,0.1),
    transforms.ToTensor(),
    transforms.Normalize([0.554, 0.450, 0.343],[0.231, 0.241, 0.241]),
  ]) 
data = datasets.ImageFolder(root=data_directory, transform=data_transform)

第二步:我在Pytorch中使用ResNet50进行训练,在其架构中进行批量归一化,如下图所示:-

我的问题是:

Q1)我需要两种标准化还是其中之一标准化就足够了?

Q2)选择标准化方法的原因是什么??

python pytorch normalization resnet
1个回答
0
投票

tl;博士两者都用,它们做不同的事情

预处理归一化和batchnorm都在做归一化操作,但作用不同。

进行预处理归一化是因为给模型“好且合理”的数字具有更好的数值稳定性。通常,将输入标准化为均值 0、方差 1 效果很好。标准化变换使用每通道均值和方差值对输入执行此操作。

请注意,如果您想使用预训练模型,则需要使用与该模型的训练数据相同的归一化参数。

Batchnorm 是模型中每层应用的归一化。 Batchnorm 跟踪激活的均值和方差,并使用这些值对它们进行标准化。 Batchnorm 通常还具有可学习的参数来移动和缩放激活(即学习正确的均值和方差)。

严格来说,batchnorm 是可选的,但它往往会改进模型。

© www.soinside.com 2019 - 2024. All rights reserved.