Tensorflow或通用神经网络:我的损失之一太高了! 损失= u + v

问题描述

我在神经网络的预测值和训练输出值之间设定了自定义损失值u + v,u为MSE。 v是从与预测值相对于输入值的梯度有关的方程式得出的值。

问题取决于输入,v相较于u产生巨大的数字。

如何使v的振幅与u相似?


我的输入未标准化。相反,我放置了归一化层,因此最终对其进行了归一化。我插入归一化层并让v产生大量数字的原因是由于预测值相对于输入的梯度而未归一化,因此我需要这样做。如果我将“好”值作为输入,例如0〜1。我的NN工作正常。但是,当我插入“真实”(与物理学相关的)值时,由于v的巨大值,该值不起作用,并且直到对u进行良好的网络训练后,该v值才会减小。 我还尝试仅针对“ u”设置损失,然后再包含“ v”。但是,由于'v'的值很高,因此该系统无法正常工作。

解决方法

尽管具有归一化层,您仍应归一化输入。

如果您的损失之一(更准确地说,损失相对于参数的梯度)过高,则可以按常数缩放,例如loss = loss/100。数学计算就很好了,可以按1/100缩放渐变。