【问题标题】:Tensorflow or general neural network: One of my loss is too high! (loss = u + v)Tensorflow或通用神经网络:我的一个损失太高了! (损失 = u + v)
【发布时间】:2020-09-20 05:40:02
【问题描述】:

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

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

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


我的输入没有标准化。相反,我放置了归一化层,最终它被归一化。我插入归一化层和 v 产生巨大数字的原因是因为预测值相对于输入的梯度,它没有被归一化,我需要这个。如果我将“好”值作为输入,例如 0~1。我的神经网络工作正常。但是,当我插入“真实”(与物理相关的)值时,由于 v 的值很大,它不起作用。并且在网络为 u 训练好之前,这个 v 值不会减小。 我还尝试仅针对“u”设置损失,然后包含“v”。但是,由于 'v' 的值很高,系统无法正常工作。

【问题讨论】:

    标签: tensorflow machine-learning deep-learning neural-network


    【解决方案1】:

    尽管有标准化层,您仍然应该标准化您的输入。

    如果您的其中一个损失(更准确地说,损失 w.r.t. 与参数的梯度)太高,您可以按一个常数对其进行缩放,例如 loss = loss/100。数学计算结果很好,可以通过1/100 缩放渐变。

    【讨论】:

    • 感谢您的回答。我想知道为什么尽管有一个规范化层,但我仍然需要规范化我的输入数据?输入数据通过归一化层传递到隐藏层。
    • @ENHorse 归一化层通常按批次归一化,而数据归一化是按数据集进行的。你的意思是输入->归一化->线性?我认为我从未见过这种情况,但输入 -> 线性 -> 标准化的频率要高得多。
    猜你喜欢
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 2021-11-07
    相关资源
    最近更新 更多