【问题标题】:How to convert standardized outputs of a neural network back to original scale?如何将神经网络的标准化输出转换回原始规模?
【发布时间】:2014-09-14 18:11:05
【问题描述】:

在我的神经网络中,我的输入从 0 到 719 不等,目标从 0 到 1340 不等。因此,我通过标准缩放对输入和目标进行标准化,使均值为 0,方差为 1。现在,我使用反向传播计算输出。我的所有输出都介于 -2 和 2 之间。如何将这些输出转换为原始比例,即位于 (0,1340) 范围内?

编辑:我有 1 个输入、5 个隐藏神经元和 1 个输出。我使用了逻辑 sigmoid 激活函数。我通过取平均值然后除以标准偏差来进行标准缩放。特别是,我的输出介于 -1.28 和 1.64 之间。

【问题讨论】:

  • 您的问题中缺少一些重要信息。首先,您使用的是什么类型的神经元(或激活函数)?它们是线性的、S 型的还是其他的?神经元输出通常在 (0, 1) 或 (-1, 1) 范围内,因此不清楚为什么您的输出是 (-2, 2)。您的问题似乎还暗示您不能支持异常值(输出值不在您的训练数据范围内)。
  • @bogatron:我已经编辑了问题以添加详细信息。
  • 您是已经对输出进行了缩放还是只是对输入进行了缩放?
  • 是的,我将每个项目都减去均值,然后除以标准差,使均值为零,方差为一。

标签: python machine-learning neural-network


【解决方案1】:

假设目标的均值和标准差为musigma,则目标y归一化 值应为(y-mu)/sigma。在这种情况下,如果您得到输出 y',您可以通过转换 y' -> mu + y' * sigma 将其移回原始比例。

【讨论】:

  • 这不是一个等式。 '->' 用于表示'to'。
【解决方案2】:

logistic sigmoid 函数的输出在 (0, 1) 范围内。因此,要将输出 y 缩放到 (0, 1340) 范围,您只需将 y 乘以 1340。

一般来说,如果您想将逻辑 Sigmoid 输出扩展到(min, max) 范围内,您可以使用

y_scaled = min + (max - min) * y

【讨论】:

  • 但是,我使用均值和标准差对输入进行了标准化,而我的输出不在 (0,1) 范围内。它们在范围内 (-1.28,1.64)。
  • 输入的缩放与输出的缩放无关。 Logistic sigmoid 输出始终在 (0, 1) 范围内。因此,如果您的输出超出该范围,那么您要么已经在缩放您的输出(您应该在我的答案中用缩放公式替换它),或者您没有使用逻辑 sigmoids 作为输出(在这种情况下,您需要弄清楚您真正的正在使用)。
猜你喜欢
  • 2017-07-25
  • 1970-01-01
  • 2013-08-08
  • 2020-05-01
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-21
相关资源
最近更新 更多