Я изучаю многослойные персептроны и пишу простую сеть для классификации точек в 2D-пространстве. Чистые поезда по алгоритму обратного распространения с импульсом.
К сожалению, даже когда локальная ошибка приближается к нулю, глобальная ошибка все еще очень высока, и я не могу понять, почему. Вывод глобальной ошибки в консоли находится в диапазоне [100, 150]. Итак, мой главный вопрос: как я могу уменьшить эту ошибку?
Я, очевидно, предоставляю ссылку на архив с моим проектом. Несколько слов об этом: почти все параметры сети находятся в файле library.h (входной, скрытый и выходной уровни слоя, скорость обучения, скорость импульса, определения производных сигма и сигма), так что если вы хотите поиграть с этим — здесь вы идете , Структура сети находится в файле perceptron.cpp, графическая библиотека — в plot.cpp. Чтобы протестировать проект, вы должны запустить его, щелкнув левой кнопкой мыши в тех точках появившегося окна, где вы хотите быть центрами классов. Щелчок правой кнопкой мыши по окну сгенерирует случайные точки в окружности радиуса 5 вокруг этих центров и будет тренировать сеть с этими точками.
Если кто-то может предложить какое-то теоретическое решение или даже по-новому взглянуть на мой код, я буду очень благодарен за это.
Я успешно решил проблему.
Прежде всего, у меня были неправильные центры групп точек, поэтому эти точки стали полностью неразделимыми в 2D-пространстве.
Вторичный, мне пришлось переписать процесс обучения как выбор случайных точек из набора.
И в-третьих, я обнаружил, что приведение double к int не самая лучшая идея (очень большая потеря данных).
Ссылка на финальную версию кода: CLICK