Обратное распространение с большим количеством входов

Я новичок, и я пытаюсь реализовать Backpropagation в C# для школьных целей (поэтому пока нет тензорного потока, нам нужно изучить его вручную). У меня есть 64 узла для входного слоя и 64 узла для выходного слоя, в некоторой степени структура автоэнкодера, потому что мы будем обсуждать MLP позже.

Я рассчитываю Delta Output как:

delta_out = (y_out) * (1 - y_out) * (desired - y_out)

Я проверил свою программу на сценарий ввода / вывода XOR, и он будет правильно угадывать для этого сценария, но если я добавлю все 64 узла ввода и вывода, то это не даст мне правильный прогноз (например, точность 0%).

Я также пытаюсь подвести итоги всего delta_out abs(delta_out). Для сценария XOR абсолютная сумма delta_out приближается к нулю в процессе обучения. Но если я выберу 64 теста ввода и вывода, то абсолютная сумма всех delta_out начинается с очень маленького числа и остается там.

Для правильной работы XOR (я также пробовал тесты OR и AND, которые просто отлично работают), я использовал следующую структуру: 2 узла для ввода, 4 узла для скрытого и 1 узел для вывода.

Для 64 входов и выходов я проверил различное количество узлов для скрытого слоя, начиная с 8 узлов до 128 узлов. Если я использую 64 или более узлов для скрытого слоя, то абсолютная сумма всех значений delta_out близка к 0 даже в начале и изменяется слишком медленно.

Я также проверил различные скорости обучения (разные скорости обучения для скрытого и выходного слоя). Я тестировал от 0,1 до 0,75, но, похоже, это не помогает для 64 ввода / вывода, которые я должен выполнить. Я также изменил количество эпох с 100 000 на 500 000, но, похоже, ничего не помогло.

Может быть, я плохо понимаю концепцию обратного распространения?

0 ответов

Другие вопросы по тегам