编写了自定义损失函数,必须以度为单位显示与真实方向的偏差。我有真实的方向(x,y,z),并且我尝试使用优化器的 degrees_mean_error 函数预测方向,如下所示:
def degrees_mean_error(y_true, y_pred):
norm = sqrt(y_pred[:, 0] ** 2 + y_pred[:, 1] ** 2 + y_pred[:, 2])
y_pred[:, 0] /= norm
y_pred[:, 1] /= norm
y_pred[:, 2] /= norm
angles = y_pred[:, 0] * y_true[:, 0] + y_pred[:, 1] * y_true[:, 1] + y_pred[:, 2] * y_true[:, 2]
return acos(angles) * 180 / np.pi
但是,我有一个问题,因为张量不是伪造的。我可以规范角膜损耗函数中的张量吗?如果您不这样做,则误差会很大,甚至 nan ,请参见下面的输出,在训练过程中不进行规范化处理:
256/170926 [..............................]-预计到达时间:3:21-损失:88.1727 >
512/170926 [.....................]-ETA:2:25-损失:66.7276 >
768/170926 [.....................]-预计到达时间:2:07-损失:南>
1024/170926 [.....................]-预计到达时间:1:58-损失:南>
1280/170926 [.....................]-预计到达时间:1:53-损失:南>
1536/170926 [.....................]-预计到达时间:1:50-损失:南>
1792/170926 [.....................]-预计到达时间:1:47-损失:南>
2048/170926 [.....................]-预计到达时间:1:45-损失:南>
答案 0 :(得分:1)
您可以立即找到偏差:
angles = (y_pred[:, 0] / norm) * y_true[:, 0] + (y_pred[:, 1] / norm) * y_true[:, 1] + (y_pred[:, 2] / norm) * y_true[:, 2]