Nag*_*S N 5 python keras tensorflow
这个问题是对这个答案的评论中讨论的一种跟进。
据我了解,该preprocess_input()
函数确实意味着输入图像的减法和 std-dev dvision。平均值是在训练 VGG 时在 ImageNet-1K 数据库上计算的平均值。
但是这个答案说当使用 VGG 特征作为损失函数时,preprocess_input()
不是必需的,我们只需要[0,1]
在传递给 VGG 之前将图像归一化到范围。这让我很困惑...
[0,255]
范围内设置图像,preprocess_input()
函数负责规范化等等。从源代码中,我了解到对于 caffe 模型,[0,1]
未完成对范围的归一化。相反,减去平均值并除以 std-dev。[0,1]
如本答案的评论中所建议的那样,将网络输出标准化到范围如何实现相同的效果?编辑 1:
我正在考虑输出图像的模型。它并不特定于单个模型。一个例子是图像去噪网络。我的网络的输入是一个嘈杂的图像,它的输出是一个去噪的图像。我想最小化 VGG 特征空间中去噪图像和地面实况图像之间的 MSE。无论我的网络输出的范围是多少,我都可以[0,255]
通过乘以适当的因子轻松地将其更改为。同样,我可以对我的网络输出进行任何所需的预处理(减去平均值,除以 std-dev)。
根据经验,我发现预处理函数的输出在大约范围内[-128,151]
。所以 VGG 网络是在这个范围内的图像上训练的。现在,如果我给它提供范围内的图像(或来自我的网络输出的张量)[0,1]
,卷积会很好,但偏差会导致问题,对吗?详细地说,对于范围内的图像[-128,151]
,一层 VGG 网络可能已经学习到了 5 的偏差。当我将范围内的图像提供[-1,1]
给 VGG 网络时,偏差会破坏一切,对吗?
我不是在训练 VGG 模型。我正在使用在 ImageNet-1k 数据库上训练的模型的权重。
通常,您不应忽略或更改训练模型的数据的归一化。它可能会以意想不到的方式破坏模型,并且由于您在另一个学习模型中使用这些特征,它似乎有效,但您现在隐藏了性能的任何变化。
对于使用饱和激活的模型尤其如此,例如使用 ReLU 时,您可能会得到比使用归一化数据更多的零。
回答您的具体问题:
是的,VGG 和其他网络的特征将在不同的范围内,它们是否有效是另一个问题,由于未使用归一化,因此会造成性能损失。
改变归一化方案不会产生和原来一样的归一化,所以也不是一样的。答案中的代码有效,但从概念上讲,它没有做正确的事情。
归档时间: |
|
查看次数: |
1446 次 |
最近记录: |