微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用神经网络在回归中计算损失如何与多个输出一起工作?

如何解决使用神经网络在回归中计算损失如何与多个输出一起工作?

我设置了一个具有 10 个输出值/节点的神经网络。其中一些是坐标、角度和距离。 经过大量训练,我的训练和测试损失变得非常好。 (~0.05) 但是在视觉上测试了这些值之后,结果并不是那么好。 (有些是,但不是全部) 我的问题是:

  1. 我是否需要一个损失函数来计算每个值的损失值? 我注意到我的标签值的总和和我的 pred 值的总和非常相似。
  2. 减少神经网络输出的维度是否可以解决这个问题? (而不是 10 个输出只有 6 个)

用于损失计算:

def get_loss(pred,label,end_points):
   hubers = tf.compat.v1.losses.huber_loss(label,pred)
   regression_loss = tf.compat.v1.reduce_mean(hubers)
   tf.compat.v1.summary.scalar('regression loss',regression_loss)
   tf.compat.v1.add_to_collection('losses',regression_loss)
return regression_loss

感谢您的时间。 :)

编辑:

感谢您的回复。 :) 我只是在视觉上测量错误,因为有无穷无尽的正确解决方案。我试图检测物体上的特定点。 因为我只有一个小数据集(约 500 组),所以我曾经以 15 度的步长围绕 z 轴旋转数据以获得更多数据。在以这种方式增加数据之前,最佳损失约为 0.2。 我的输入标签一个 10*1 的向量,它看起来像这样:

[距离,X,Y,Z,alpha,beta,gamma,deltaX,deltaY,deltaZ]

 5.720092519071295900e-02
1.006699085235540636e-03
8.009913066864016162e-02
1.114500999450683594e+00
-3.119294947657255790e+00
4.009960331703191737e-03
-2.526702780658843128e+00
-1.214617763502171266e-01
-1.560672931229585836e-01
8.294558525085449219e-02

虽然我的 pred 看起来像这样:

4.625578597187995911e-02
-4.372183978557586670e-02
1.622541248798370361e-02
1.086338281631469727e+00
-3.110351085662841797e+00
7.853045314550399780e-02
-2.459422111511230469e+00
-4.620660468935966492e-02
-5.462351441383361816e-02
7.349613308906555176e-02

Picture of my actual loss function (green is train loss; red is test loss)

我根本没有缩放这些值。

解决方法

更新权重不取决于输出预测的总和,它取决于所有 10 个损失函数的梯度总和。

即使您的训练和验证错误在训练时看起来不错,但您的未缩放数据可能仍然存在很高的错误。我不知道你是如何测量测试误差的。提醒一下,MSE 应该在逆缩放预测值和实际测试值之间进行测量。请务必逆向缩放您的预测。

使用特定的标签损失函数可能会产生良好的结果,这取决于目标数据分布和对您的问题的贡献。而降低输出策略的维度也取决于丢弃的标签对学习进度的贡献。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。