简体   繁体   English

如何在 TensorFlow 中的自定义损失函数中归一化张量?

[英]How to normalize tensor inside custom loss function in TensorFlow?

The custom loss function was written and must to show a deviation from truth direction in degrees.编写了自定义损失函数,并且必须以度数显示与真实方向的偏差。 I have the with truth direction (x, y, z), and I try to predict direction use the degrees_mean_error function for optimizer, which is presented below:我有真实的方向(x,y,z),我尝试使用度数_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

But, I have a problem, because the tensor isn't assigment.但是,我有一个问题,因为张量不是赋值。 Can I normalize the tensor inside keras loss function?我可以标准化 keras 损失函数中的张量吗? If you don't do so, the error will be big, even nan , see the below output without normilize during training:如果不这样做,误差会很大,甚至是nan ,在训练期间没有规范化的情况下查看以下输出:

256/170926 [..............................] - ETA: 3:21 - loss:88.1727 256/170926 [......................................] - 预计到达时间:3:21 - 损失:88.1727

512/170926 [..............................] - ETA: 2:25 - loss: 66.7276 512/170926 [......................] - 预计到达时间:2:25 - 损失:66.7276

768/170926 [..............................] - ETA: 2:07 - loss: nan 768/170926 [......................................] - 预计到达时间:2:07 - 损失:nan

1024/170926 [..............................] - ETA: 1:58 - loss: nan 1024/170926 [......................................] - 预计到达时间:1:58 - 损失:nan

1280/170926 [..............................] - ETA: 1:53 - loss: nan 1280/170926 [......................................] - 预计到达时间:1:53 - 损失:nan

1536/170926 [..............................] - ETA: 1:50 - loss: nan 1536/170926 [......................................] - 预计到达时间:1:50 - 损失:nan

1792/170926 [..............................] - ETA: 1:47 - loss: nan 1792/170926 [......................................] - 预计到达时间:1:47 - 损失:nan

2048/170926 [..............................] - ETA: 1:45 - loss: nan 2048/170926 [......................................] - 预计到达时间:1:45 - 损失:nan

您可以立即找到偏差:

 angles = (y_pred[:, 0] / norm) * y_true[:, 0] + (y_pred[:, 1] / norm) * y_true[:, 1] + (y_pred[:, 2] / norm) * y_true[:, 2]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM