这是一个更具概念性的问题,但我必须承认我已经处理了一段时间。
假设您想使用例如keras训练神经网络(NN)。因为建议您在培训之前执行数据的规范化或标准化,例如,使用标准化:
x_new = (x_old - mean)/standarddev
然后,你继续训练(keras中的model.fit
)并尽量减少损失函数,非常好。
编辑:在我的情况下,我有一组介于200和400之间的值。这是一个NN,有1个输入,1个输出。我按照告诉标准化输入值和期望值,因此NN以标准化方式学习权重和偏差。
现在,想象一下,我有一个全新的数据集,其值介于200到400之间,我想预测一个输出,使用NN和之前的训练。您可以在keras中使用model.predict(x)
,x
我收到的全新值集,标准化(或标准化),因为您的NN是以这种方式接受培训的。但是,在predict
之后,我得到的是一系列标准值,,但我想将它们映射到200到400的通常范围。我不知道该怎么做。
我知道你可以在没有标准化或标准化的情况下进行训练,但我已经读过,如果你标准化(或标准化),单位(神经元)输出范围内的值(例如,0和0之间) 1为sigmoid),训练有所改善。
谢谢。
答案 0 :(得分:3)
好的,我认为我的问题是正确的,所以我会试着解释一下如何处理数据规范化:
<强> 1。关于输入和输出分配的假设:通常在神经网络训练中 - 你假设你的数据(输入和输出)来自一些概率分布:我们称之为 X 输入和 Y 的输出。在培训阶段,有一些原因可以使这种分配为零均值和单位标准差。
<强> 2。数据规范化和恢复的统计部分:因为这一点 - 您必须在培训网络期间解决另一项任务。此任务是估算输入分布 X 和输出分布 Y 的平均值和标准差。您只需将经验均值和标准差应用于您的训练数据即可。
第3。应用阶段 - 输入:当您将模型应用于新输入时,您还假设您的输入来自分布 X ,因此您还需要将其标准化为零均值< / strong>和单位标准差,这是一个有趣的部分 - 您可以使用训练集和一组新数据来获得更好的 X的均值和标准差的估计但为了避免在验证案例中过度拟合 - 您通常使用在培训阶段获得的平均值和标准差来使新数据标准化。
<强> 4。应用阶段 - 输出:这部分比较棘手,因为当您将网络应用于新的标准化输入时,您将获得 Y *〜(Y - mean'(Y))/ sd'(Y)<的新输出/ strong>其中意味着'(Y)和 sd'(Y)是根据您的训练集从经验上获得的平均值和标准偏差的估算值 Y 是您输出的原始分配。这是因为在训练集中,您可以为优化程序提供来自此分配的输出数据。因此,为了使您的输出重新进行转换,您需要应用转换: Y * * sd'(Y)+ mean'(Y)。这与标准化转型相反。
<强>概要强>
您的培训和申请阶段如下:
我希望这个答案可以解决您的问题,让您毫不怀疑数据的标准化和去标准化细节:)
答案 1 :(得分:1)
取决于您是否对您的输出进行标准化:
<强> 1。如果不是:那么您的输出值不是标准化的,您不必担心它。
<强> 2。如果是:,则只需{{1}}即可保持均值/ sd 和取消您的输出。
答案 2 :(得分:1)
使用以下公式对输入/输出值进行标准化:
X_s = (X - mean) / std
要进行去标准化,您必须具有输入和输出的均值和标准值。将它们保存在某处,然后使用以下等式:
X = X_s * std + mean
例如,假设对于[200,400]范围,平均值为300,标准差为100.然后,对于标准化值0.5,非标准化值为:
X = 0.5 * 100 + 300 = 350
如果你没有存储mean / std,那么你无法恢复原始值。