如何使火炬张量“非正规化”?

时间:2019-09-15 18:31:02

标签: python regression pytorch normalization

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

我的标签的格式为:

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

现在,我想规范化每一列,以使值的范围从0到1。

我发现pytorch具有torch.nn.functional.normalize函数,该函数使我可以使用所需的p范数沿特定维度进行归一化。

是否存在一个允许我缩放归一化值的逆函数?

当前,我正在使用一个自定义函数,该函数按如下所述执行功能缩放,将两个列缩放在一起,但是,我想确保在重写之前,我没有创建一个在割炬库中已经存在的函数。

 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层,然后将其馈送到两个完全连接的层中

1 个答案:

答案 0 :(得分:0)

这是一个技巧问题。 毫无意义地使规范化

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

所以你很安全。

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


如果存在回归问题,则相同。至少到目前为止我创建的架构。例如:创建模型M1以学习求和+的操作。 您提供一对值a,b,并将总和c设置为预测值。

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

在推理阶段,您要做的就是规格化输入(除以10),您将获得正确的输出。

enter image description here