Функция потери регрессии TensorFlow - PullRequest
0 голосов
/ 28 августа 2018

Я реализовал 2-слойную (2x20 узлов) пользовательскую регрессию DNN в TensorFlow. 16 числовых функций ввода.

В целом я доволен достигнутой высокой точностью (~ 95%), но меня разочаровывает большая доля крайне неправильных выбросов в моих неправильных предсказаниях.

Я полагаю, что ответ заключается либо в минимизируемой мной функции потерь (в настоящее время MSE), либо в использовании регуляризации (я пробовал разные уровни отсева и регуляризации L2 с небольшим влиянием на сокращение в значительной степени неверных прогнозов).

Первоначально я решил эту проблему, используя классификацию, но переключился на регрессию, надеясь, что сведение к минимуму MSE уменьшит количество крайне неправильных прогнозов.

Существует ли более совершенная функция потерь или метод регуляризации, которые я не рассматривал? Примечание: я использую перекрестную энтропию для классификации, но я считаю, что она не подходит для регрессии.

1 Ответ

0 голосов
/ 28 августа 2018

Просто предложение:

Вы можете поэкспериментировать с L1 (или MAE, как указано в этом посте )

loss = Sum_n |y_n - y_n'| 

Согласно статье МАЭ должен быть более устойчивым по сравнению с выбросами.

Вы также можете поэкспериментировать с «нормами» или «расстояниями» более высокого порядка для вашей функции потерь, такими как нормы Lp

loss = (Sum_n |(y_n - y_n')|^p)^(1/p)

Примечание:

  1. | | обозначает абсолютное значение или модуль и необходимо только для нечетного
  2. n - это индекс, который работает над компонентами вашего вывода в виде вектора
  3. y - ваш вывод, а y - «истинное» значение

Не уверен, решит ли это вашу проблему, но я думаю, что стоит поэкспериментировать.

Удачи!

...