gpt4 book ai didi

python - Keras VGG 模型中 preprocess_input() 函数的作用是什么?

转载 作者:行者123 更新时间:2023-12-03 16:35:17 28 4
gpt4 key购买 nike

这个问题是对 this answer 评论中讨论的跟进。 .

据我了解,preprocess_input() function 确实意味着输入图像的减法和 std-dev dvision。平均值是在训练 VGG 时在 ImageNet-1K 数据库上计算的平均值。

但是this answer说当使用 VGG 特征作为损失函数时,preprocess_input()不是必需的,我们只需要将图像标准化为 [0,1]传递给 VGG 之前的范围。这让我很困惑...

  • 如果我们不进行预处理,那么与用于训练 VGG 的那些图像相比,输入将处于不同的范围内。 VGG 功能如何仍然有效?
  • 据我了解this answer ,我们应该在 [0,255] 中有图像范围和 preprocess_input()函数负责规范化和所有。来自 source code ,据我所知,对于caffe模型,归一化为[0,1]范围未完成。相反,减去平均值并除以 std-dev。如何将网络输出规范化为 [0,1]范围如 this answer 的评论中所建议达到同样的效果?

  • 编辑 1 :
    我正在考虑输出图像的模型。它并不特定于单个模型。一个例子是图像去噪网络。我的网络的输入是一个嘈杂的图像,它的输出是一个去噪的图像。我想最小化 VGG 特征空间中去噪图像和地面实况图像之间的 MSE。无论我的网络输出范围是多少,我都可以轻松地将其更改为 [0,255]通过乘以适当的因素。同样,我可以对我的网络输出进行任何所需的预处理(减去平均值,除以 std-dev)。

    根据经验,我发现预处理函数的输出大约在 [-128,151] 范围内。 .所以 VGG 网络是在这个范围内的图像上训练的。现在,如果我给它提供范围内的图像(或来自我的网络输出的张量) [0,1] ,卷积可以,但偏差会导致问题,对吗?详细说明,对于范围内的图像 [-128,151] ,一层 VGG 网络可能已经学习到了 5 的偏差。当我输入范围内的图像时 [-1,1]对于 VGG 网络,偏见会破坏一切,对吗?

    我不是在训练 VGG 模型。我正在使用在 ImageNet-1k 数据库上训练的模型的权重。

    最佳答案

    通常,您不应忽略或更改训练模型的数据的归一化。它可能会以意想不到的方式破坏模型,并且由于您在另一个学习模型中使用这些特征,它似乎有效,但您现在隐藏了性能的任何变化。

    对于使用饱和激活的模型尤其如此,例如使用 ReLU 时,您可能会得到比使用归一化数据更多的零。

    回答您的具体问题:

  • 是的,VGG 和其他网络的特征将在不同的范围内,它们是否有效是另一个问题,由于未使用归一化,因此会造成性能损失。
  • 改变归一化方案不会产生和原来一样的归一化,所以也不是一样的。答案中的代码有效,但从概念上讲,它没有做正确的事情。
  • 关于python - Keras VGG 模型中 preprocess_input() 函数的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61789867/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com