В настоящее время я внедряю 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)?