模型在喀拉拉邦预测后如何恢复原始值?

Dav*_*vid 4 python neural-network keras

这是一个更具概念性的问题,但是我不得不承认我已经处理了一段时间。

假设您想使用例如keras训练神经网络(NN)。建议您在训练之前对数据进行标准化或标准化,例如,进行标准化:

x_new = (x_old - mean)/standarddev
Run Code Online (Sandbox Code Playgroud)

然后,您进行培训(model.fit在keras中)并最小化损失函数,所有这些都非常好。

编辑:就我而言,我有一组介于200和400之间的值。这是一个具有1个输入,1个输出的NN。正如我所说的那样,对输入值和期望值进行标准化,因此NN以标准化的方式学习权重和偏差。

现在,假设我有一个全新的值在200到400之间的数据集,并且我想使用先前训练的NN来预测输出。您可以model.predict(x)在keras 中使用x我收到的,标准化(或规范化)的全新值集,因为您的NN是以这种方式训练的。但是,之后得到的predict是标准化的值数组,但我想将它们映射到通常的200到400范围。而且我不知道该怎么做。

我知道您可以在不进行标准化或标准化的情况下进行训练,但我读过,如果您进行标准化(或标准化),其值应在单位(神经元)的输出范围内(例如,对于0到1,乙状结肠),训练会改善。

谢谢。

Mar*_*jko 5

好的,我认为我正确地了解了您的问题,因此我将尝试向您解释如何处理数据标准化:

1.关于输入和输出的分布的假设:通常在神经网络训练中-您假设您的数据(输入和输出)都来自某种概率分布:我们将其称为输入X和输出Y。在训练阶段,有一些原因使这种分布为零均值并且具有单位标准差

2.数据归一化和恢复的统计部分:因此,您在训练网络时必须解决另一项任务。这项任务是估计输入分布X和输出分布Y均值标准差。您只需将经验均值和标准差应用于训练数据即可。

3.应用阶段-输入:当您将模型应用于新输入时,您还假设输入来自离散X,因此您还需要将其标准化为零均值单位标准偏差,这是一个有趣的部分-您可以同时使用训练集和一组新数据来获得X的均值和标准差的更好估计,但要避免在验证情况下过拟合-通常使用在训练阶段获得的均值和标准差来使新数据标准化。

4.应用阶段-输出:这部分比较棘手,因为当您将网络应用于新的标准化输入时,会从Y *〜(Y-均值(Y))/ sd'(Y)获得新的输出,其中均值'(Y)sd'(Y)是根据经验从训练集中获得的均值和标准差的估计值,而Y是输出的原始分布。这是因为在训练集期间,您会将来自此分配的输出数据提供给优化器。因此,要使您的输出变得标准化,您需要应用以下转换:Y * * sd'(Y)+ mean'(Y)。这与标准转换相反。

摘要:

您的培训和申请阶段如下:

  1. 通过计算训练输入的经验均值和标准偏差(均值'(X)sd'(X)以及输出的经验均值和标准差(均值'(Y)),您将获得训练阶段和应用阶段所需的统计信息和sd'(Y))。存储它们很重要,因为在应用程序阶段将需要它们。
  2. 您将输入和输出数据均标准化为零均值单位标准偏差,并在其上训练模型。
  3. 在应用阶段,通过将输入减去存储的平均值'(X)并除以存储的sd'(X),即可对输入进行标准化处理,以获得新的输出Y *
  4. 您可以使用在训练阶段获得的存储均值'(Y)sd'(Y)通过转换(Y * * sd'(Y)+ mean'(Y)来对输出进行标准化。

我希望这个答案能解决您的问题,并让您毫无疑问地对数据进行标准化和反标准化:)