如何“反规范化”pytorch 张量?

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

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

我的标签是这样的:

[[ 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个回答
0
投票

这是一道trick题吧。 去规范化你的价值观是没有意义的。

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

所以你是安全的。

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


在回归问题的情况下是一样的。至少我到目前为止创建的架构。例如:创建模型 M1 来学习 sum

+
运算。 您提供一对值
a,b
,并将总和
c
设置为预测。

如果您使用

a/10, b/10
训练另一个模型 M2 并再次提供
c
作为预测,这意味着您对输入进行了归一化。

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

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