为啥我们将图像归一化为mean=0.5,std=0.5?

Posted

技术标签:

【中文标题】为啥我们将图像归一化为mean=0.5,std=0.5?【英文标题】:Why do we normalize the image to mean=0.5, std=0.5?为什么我们将图像归一化为mean=0.5,std=0.5? 【发布时间】:2019-02-07 20:55:00 【问题描述】:

我在 Github 中寻找 GAN 代码。我找到的代码使用 pytorch。在这段代码中,我们首先将图像归一化为mean = 0.5,std = 0.5。通常,归一化为 min = 0 和 max = 1。或均值 = 0 和 std = 1 的正态分布。为什么这归一化为均值 = 0.5 和 std = 0.5?

transformtransfo  = transforms.Compose([
        transforms.ToTensor(),
        transforms.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))
])

【问题讨论】:

归一化的核心原因是加速收敛。它可以在 0-1 或 -1-1 之间。据我所知。分享更多信息。 【参考方案1】:

transform.normalizemeanstd 的值不是所需的平均值和标准差,而是要减去和除以的值,即 估计值 平均和标准。

在您的示例中,您减去 0.5,然后除以 0.5,得到平均值为零且值在 [-1, 1] 范围内的图像

【讨论】:

【参考方案2】:

添加到 Shai 的回答中,

与训练其他神经网络类似,我们对 GAN 输入进行归一化,以 (1) 提高网络的收敛性,以及 (2) 为所有特征赋予相同的值范围,以免某些特征因为范围广泛而支配其他特征价值。

此外,大多数 GAN 模型中的生成器倾向于使用 tanh 函数作为最终激活,它将输出映射到 [-1, 1] 值范围。将我们的图像数据缩放到相同的值范围将为要训练的鉴别器提供相同的数据

【讨论】:

以上是关于为啥我们将图像归一化为mean=0.5,std=0.5?的主要内容,如果未能解决你的问题,请参考以下文章

癌症语义分割中的图像和掩模归一化

《南溪的目标检测学习笔记》——特征归一化(mead&std)

标准偏差为零的归一化

归一化为 [0,1] 与 [-1,1]

深度学习原理与框架- batch_normalize(归一化操作)

totensor方法和normalize方法 数值映射和归一化