![]() |
Модераторы: Rickert |
![]() ![]() ![]() |
|
almaz1988 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 4.6.2013 Репутация: нет Всего: нет |
Доброго времени суток всем)
Я новичок в нейронных сетях. Изучаю их по книге Хайкина "Нейронные сети. Полный курс". Читаю главу за главой и реализовываю все прочитанное на языке С++. Глава 3. Однослойный персептрон. - Здесь проблем не возникло. Написал программу в С++ распознающую образы с помощью однослойного персептрона. Перешел к главе 4 - "Многослойный персептрон". Написал программу, реализующую многослойный персептрон. Решил решить задачу XOR: 2 входа, 2 нейрона в скрытом слое и 1 нейрон в выходном слое. Веса генерируются рандомно в диапазоне от -0.9 до +0.9. Веса корректируются после каждой обучающей пары, а не после эпохи в целом. Активационная функция - логистическая: F(x)= 1/ ( 1 + exp( 2 - 4*x ) ). Обучающая выборка состоит из 4-ех пар: 0 0 | 0 0 1 | 1 1 0 | 1 1 1 | 0 Запускаю - не обучается! Меняю скорость обучения, количество эпох обучения - не помогает. Принялся рыть в интернете. Наткнулся на статью:http://21.net78.net/lesson.php?glava=2. Там приводится решение задачи XOR с той же структурой сети ( 2-1 ) с конкретно заданными стартовыми значениями весов: 1-й нейрон скрытого слоя: -0.082843 и 0.018629. 2-й нейрон скрытого слоя: - 0.011006 и - 0.071407. нейрон выходного слоя: 0.032680 и 0.020701. Запускаю обучение своей сети с этими весами - срабатывает! Сеть обучается! Но не хочет обучаться с рандомными весами. Меняю диапазоны генерации весов - не помогает. По-видимому я столкнулся с каким-нибудь эффектом при обучении в сети, но т.к. слабо ориентируюсь в тематике не понимаю с каким именно. Судя по Хайкину - желательно обучать сеть корректируя веса после каждой обучающей выборки в целом, а не после каждой отдельной обучающей пары. Но все же интересно понять в чем суть возникшей проблемы. Почему сеть обучается только при определенных сочетаниях весов? Наверняка для опытных кодеров нейронных сетей это детский вопрос) Буду благодарен за разъяснения) |
|||
|
||||
almaz1988 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 4.6.2013 Репутация: нет Всего: нет |
Применил в качестве активационной функции гиперболического тангенс. Помогло! Сеть обучается при рандомных стартовых весах. Но при входных значениях от 0 до 1. Если же ноли заменить на -1, как и должно быть при использовании гиперболического тангенса, то сеть не обучается. В общем непонятно.
|
|||
|
||||
Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 5 Всего: 27 |
Сегодня реализовал тот же самый урок - у меня все отлично работает с логистической функцией. Правда при отладке я нарыл у себя несколько ошибок в алгоритме обучения, но потом исправил и все ок. Может у вас та же проблема?
только там в примере функция немного от вашей отличается - 1 / (1 + exp(-4*(x-0.5))) Может в этом ошибка, Вы ж наверное производную взяли из урока? Это сообщение отредактировал(а) Bitter - 19.6.2013, 22:43 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |