2010-05-23 7 views
7

Я создаю инструмент для прогнозирования времени и стоимости программных проектов на основе прошлых данных. Инструмент использует нейронную сеть для этого, и до сих пор результаты являются многообещающими, но я думаю, что я могу сделать намного больше оптимизации, просто изменив свойства сети. Там, кажется, нет каких-либо правил или даже много лучших практик, когда дело доходит до этих настроек, поэтому, если кто-нибудь с опытом может мне помочь, я бы очень признателен.Настройки нейронной сети для быстрого обучения

Входные данные состоят из целого ряда целых чисел, которые могут увеличиваться так же высоко, как пользователь хочет, но большинство из них будет меньше 100 000, я бы подумал. Некоторые из них будут такими же низкими, как 1. Они представляют собой такие детали, как количество людей в проекте и стоимость проекта, а также сведения о сущности базы данных и прецедентах.

Всего 10 входов и 2 выхода (время и стоимость). Я использую Resilient Propagation для обучения сети. В настоящее время он имеет: 10 входных узлов, 1 скрытый слой с 5 узлами и 2 выходных узла. Я тренируюсь, чтобы получить 5% -ную ошибку.

Алгоритм должен запускаться на веб-сервере, поэтому я поставил в меру, чтобы остановить обучение, когда похоже, что он никуда не денется. Для этого установлено 10 000 тренировочных итераций.

В настоящее время, когда я пытаюсь обучать его некоторыми данными, которые немного разнообразны, но в пределах того, что мы ожидаем от пользователей, он занимает много времени, чтобы тренироваться, ударяя предел в 10 000 итераций и снова.

Это первый раз, когда я использовал нейронную сеть, и я действительно не знаю, чего ожидать. Если бы вы могли дать мне несколько советов о том, какие настройки я должен использовать для сети и для ограничения итерации, я бы очень признателен.

Спасибо!

ответ

10

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

  • Вам необходимо нормализовать входные данные. Если один узел видит среднее значение 100 000, а другое - 0,5, вы не увидите равного влияния с двух входов. Вот почему вам нужно их нормализовать.
  • Только 5 скрытых нейронов для 10 входных узлов? Я помню, где-то читал, что вам нужно как минимум удвоить количество входов; попробуйте 20+ скрытых нейронов. Это предоставит вашей модели нейронной сети возможность разработки более сложной модели. Однако слишком много нейронов и вашей сети просто запомнят набор данных обучения.
  • Упругое обратное распространение в порядке. Просто помните, что есть другие обучающие алгоритмы, такие как Levenberg-Marquardt.
  • Сколько у вас комплектов тренировок? Нейронные сети обычно нуждаются в большом наборе данных, чтобы быть полезными при создании полезных прогнозов.
  • Рассчитать добавочный импульс к вашему алгоритму тренировки веса, чтобы ускорить процесс, если вы еще этого не сделали.
  • Онлайн-обучение имеет тенденцию быть лучше для составления обобщенных прогнозов, чем для обучения в пакетном режиме. Первый обновляет веса после запуска каждого тренировочного набора через сеть, в то время как последний обновляет сеть после прохождения каждого набора данных. Это ваш вызов.
  • Являются ли ваши данные дискретными или непрерывными? Нейронные сети имеют тенденцию работать лучше с 0 s и 1 s, чем непрерывными функциями. Если это первый, я бы рекомендовал использовать функцию активации сигмоида. Комбинация tanh и linear функций активации для скрытого и выходного уровней имеет тенденцию делать хорошую работу с непрерывно изменяющимися данными.
  • Вам нужен еще один скрытый слой? Это может помочь, если ваша сеть имеет дело со сложным отображением поверхности ввода-вывода.
+0

Спасибо за всю информацию! 1. Я думал о нормализации входных данных, но я не знаю, как это сделать, когда значение не имеет максимума, а некоторые значения могут сильно различаться. 2. Я попробовал с 20 скрытыми нейронами, и для некоторых данных вместо секунд потребовалось 5 часов вместо секунд. Казалось, что более 10 не было хорошо. 4. Количество наборов данных зависит от количества пользователей. Мы использовали около 5. 5. Мы используем инфраструктуру нейронной сети под названием Encog, я буду изучать изменение импульса, но я не знаю если это возможно. – danpalmer

+0

6. Опять же, я не знаю, как работает каркас онлайн-обучения, я буду изучать это. 7. Данные все непрерывны, и я установил Линейные активации на все, потому что я бы предположил, что результаты должны отличаться в зависимости от результата. 8. Как и в пункте 2, я обнаружил, что с двумя слоями он наносил мой наложенный предел намного больше, а LOT больше работал. – danpalmer

+0

Lol. Я тоже должен быть в постели, завтра. Я добавил немного нормализации. Это не очень хорошо, но все значения набора данных будут находиться между 0 и 1, а предсказания не будут намного выше. Я увеличил скорость обучения на 18000% на одном. Я продолжу тестирование и попытаюсь выполнить некоторые другие меры, но на данный момент это отличный результат. Большое спасибо за Вашу помощь! – danpalmer

Смежные вопросы