【问题标题】:How to "denormalize" a pytorch tensor?如何“非规范化”一个 pytorch 张量?
【发布时间】:2020-01-16 17:09:47
【问题描述】:

我想对我的神经网络的标签进行归一化,但也能够反转归一化过程,以便我可以将我的预测输出缩放回原始大小。

我的标签是这样的:

[[ 2.25, 2345123.23],
 [ 1.13, 234565.11],
 ...
 [0.12, 990232.98]]

现在我想对每一列进行规范化,使值范围从 0 到 1。

我发现 pytorch 具有 torch.nn.functional.normalize 函数,它允许我使用我想要的任何 p 范数沿特定维度进行标准化。

是否存在允许我缩放标准化值的现有反函数?

目前,我正在使用一个自定义函数来执行如下特征缩放,它将两列一起缩放,但是,我想确保在重写之前我没有创建一个已经存在于 torch 库中的函数。

 A = lbl_min
 B = lbl_max
 a = lower_bound
 b = upper_bound
 self.labels = a*np.ones(shape) + (self.labels - A*np.ones(shape))*(b-a)/(B-A)

附加信息: 我正在使用回归模型来输出连续的现实世界值。我需要“非规范化”我的预测,以便根据真实值验证它们。此外,如果我要在实际应用中使用我的模型,我需要将我的输出恢复为原始单位。

  • 我的神经网络一次预测多个值,这些值在非常不同的范围内。
  • 这两个值具有不同的分布,但可以根据相同的输入进行预测。
  • 我的输入是输入到两个 CNN 层中的图像,然后将其输入到两个完全连接的层中

【问题讨论】:

标签: python regression pytorch normalization


【解决方案1】:

这是一个技巧问题。 非规范化你的价值观是没有意义的。

为什么?因为一旦你对它们进行归一化,神经网络应该学会根据你的归一化值创建预测。

所以你是安全的。

顺便说一句,您通常会使用数据的均值和标准来进行标准化。


在回归问题的情况下,它是相同的。至少到目前为止我创建的架构。例如:创建模型 M1 来学习 sum + 运算。 您提供一对值 a,b 并将总和 c 设置为预测。

如果您使用 a/10, b/10 训练另一个模型 M2 并再次提供 c 作为预测,这意味着您将输入标准化。

您在推理阶段所要做的就是规范化您的输入(除以 10)并得到正确的输出。

【讨论】:

  • 这并不完全正确。对于回归问题,回滚目标值的归一化对于获得准确的预测至关重要。
  • @prosti 我的情况正是 norok2 指出的。我有一个回归问题,之后需要“非规范化”我的预测。我会在我的问题中澄清这一点。
  • @norok2 我最近创建了一些实验,我总是使用输入的归一化并且从未真正弄乱目标,也许这种做事方式可以帮助 avgjoe。
  • @avgJoe,谢谢,我真的相信你可以尝试保持目标不变,只在工作的训练和推理阶段处理输入。
  • @avgJoe,即使对于灰度图像,您也可以进行标准化。诀窍是你在训练中使用过什么值,你也应该将它们用于推理。
猜你喜欢
  • 2020-03-01
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
  • 2020-08-01
  • 2015-01-10
  • 1970-01-01
  • 2019-04-25
  • 1970-01-01
相关资源
最近更新 更多