Как я могу реализовать пользовательскую функцию потерь, которая учитывает несколько прогнозов сети? - PullRequest
3 голосов
/ 24 марта 2020

В настоящее время я внедряю CNN с пользовательской функцией ошибок. Проблема, которую я пытаюсь решить, основана на физике, поэтому я могу рассчитать максимально достижимую точность или, другими словами, я знаю наилучшее возможное (то есть минимальное) стандартное отклонение, которое я могу достичь. Эти наилучшие возможные значения точности вычисляются во время генерации обучающих данных с использованием нижней границы Крамера-Рао (CRLB).

Сейчас моя функция ошибок выглядит примерно так (в Керасе):

def customLoss(yTrue, yPred):
    STD = yTrue[:, 10:20]
    yTrue = yTrue[:, 0:10]
    dev = K.mean(K.abs(K.abs(yTrue - yPred) - STD))
    return dev

В этом случае у меня есть 10 параметров, поэтому я хочу оценить с 10 CRLB. Я поместил CRLB в целевой вектор только для того, чтобы иметь возможность обрабатывать функцию error.

К моему вопросу. Этот метод работает, но это не то, что я хочу. Проблема заключается в том, что ошибка рассчитывается с учетом одного прогноза сети, но для правильности сети необходимо будет прогнозировать один и тот же набор данных / пакет несколько раз. Сделав это, я смогу увидеть стандартное отклонение прогноза и использовать его для вычисления ошибки (я использую байесовский CNN).

Кто-то знает, как реализовать такую ​​функцию в Керасе или Tensorflow (я бы тоже не против перейти на PyTorch)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...