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,乙状结肠),训练会改善。
谢谢。
好的,我认为我正确地了解了您的问题,因此我将尝试向您解释如何处理数据标准化:
1.关于输入和输出的分布的假设:通常在神经网络训练中-您假设您的数据(输入和输出)都来自某种概率分布:我们将其称为输入X和输出Y。在训练阶段,有一些原因使这种分布为零均值并且具有单位标准差。
2.数据归一化和恢复的统计部分:因此,您在训练网络时必须解决另一项任务。这项任务是估计输入分布X和输出分布Y的均值和标准差。您只需将经验均值和标准差应用于训练数据即可。
3.应用阶段-输入:当您将模型应用于新输入时,您还假设输入来自离散X,因此您还需要将其标准化为零均值和单位标准偏差,这是一个有趣的部分-您可以同时使用训练集和一组新数据来获得X的均值和标准差的更好估计,但要避免在验证情况下过拟合-通常使用在训练阶段获得的均值和标准差来使新数据标准化。
4.应用阶段-输出:这部分比较棘手,因为当您将网络应用于新的标准化输入时,会从Y *〜(Y-均值(Y))/ sd'(Y)获得新的输出,其中均值'(Y)和sd'(Y)是根据经验从训练集中获得的均值和标准差的估计值,而Y是输出的原始分布。这是因为在训练集期间,您会将来自此分配的输出数据提供给优化器。因此,要使您的输出变得标准化,您需要应用以下转换:Y * * sd'(Y)+ mean'(Y)。这与标准转换相反。
摘要:
您的培训和申请阶段如下:
我希望这个答案能解决您的问题,并让您毫无疑问地对数据进行标准化和反标准化:)
归档时间: |
|
查看次数: |
2772 次 |
最近记录: |