Как нормализовать тензор внутри пользовательской функции потерь в TensorFlow? - PullRequest
2 голосов
/ 23 марта 2019

Была написана пользовательская функция потерь, которая должна показывать отклонение от истинного направления в градусах.У меня есть направление с истинностью (x, y, z), и я пытаюсь предсказать направление, используя для оптимизатора функцию градус_грамм , которая представлена ​​ниже:

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 [..............................] - ETA: 3:21 - потери: 88,1727

512/170926 [..............................] - ETA: 2:25 - потери: 66,7276

768/170926 [..............................] - ETA: 2:07 - потери: nan

1024/170926 [..............................] - ETA: 1:58 - потери: nan

1280/170926 [..............................] - ETA: 1:53 - потери: nan

1536/170926 [..............................] - ETA: 1:50 - потери: nan

1792/170926 [..............................] - ETA: 1:47 - потери: nan

2048/170926 [..............................] - ETA: 1:45 - потери: nan

1 Ответ

1 голос
/ 24 марта 2019

Вы можете сразу найти отклонение:

 angles = (y_pred[:, 0] / norm) * y_true[:, 0] + (y_pred[:, 1] / norm) * y_true[:, 1] + (y_pred[:, 2] / norm) * y_true[:, 2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...