Я не совсем понимаю, как рассчитывается ошибка кросс-энтропии. Поскольку лог некоторого отрицательного числа не определен (или мнимый), а выходные данные нейронной сети могут быть некоторым отрицательным числом (веса и смещения инициализируются случайным образом), в результате я часто получаю NaN. Как мне избежать этого?
Пример:
output[] = {-0.78, -0.98, 0.78, -0.68};
target[] = {-1.0, -1.0, 1.0, 1.0};
error = ln(0.78) * 1.0 + ln(-0.68) * 1.0;
Если ваша задача представляет собой двоичную классификацию, я предлагаю вам изменить целевое значение с «-1» на «0». В последнем слое, выходном слое, у вас есть два нейрона (по одному для каждого класса). Для вывода нейронной сети вы должны использовать функция softmax, он присваивает вероятность каждому классу (то есть, у вас нет отрицательных значений). В конце выходной файл для каждого экземпляра является меткой класса, которая соответствует большей из этих двух вероятностей.
В определении перекрестной энтропии показана количественная разница между двумя вероятностными распределениями. В случае машинного обучения он вычисляет разницу между вашей «целью» (истинным значением) и значением, прогнозируемым вашей «выходной» моделью.
Вероятность может варьироваться только в диапазоне [0; 1] и не может быть отрицательной в любом случае. Отрицательные числа не имеют никакого смысла с точки зрения вероятности.