|
32 / 32 / 19
Регистрация: 13.07.2011
Сообщений: 140
|
||||||
Нейронная сеть. Обучение с учителем12.10.2015, 03:39. Показов 3206. Ответов 6
Метки нет (Все метки)
Доброго времени суток форумчане.
Появилась необходимость написать нейронную сеть, которая обучается методом обратного распространения ошибки. Но возникли определенные проблемы: сеть просто не хочет обучаться. На выходе сети должны выдаваться либо 0, либо 1 (то есть если выход сети будет больше 0.5, то 1, меньше - 0). Но на выходе получаются значения практически одинаковые и для 0, и для 1. Не могу понять в чем дело и почему так происходит. Ниже представлены исходный код и файл с обучающими выборками, по типу [0.304, 0.930, 0.402, 0.878], [1.0], где первые 4 значения это входные значения, а последнее, которое должно получится. Надеюсь на вашу помощь, так как не могу уже разобраться с этим примерно неделю. Спасибо большое заранее Исходный код: Кликните здесь для просмотра всего текста
0
|
||||||
| 12.10.2015, 03:39 | |
|
Ответы с готовыми решениями:
6
Автоматический анализ тональности твитов (обучение с учителем) Нейронная сеть
|
|
32 / 32 / 19
Регистрация: 13.07.2011
Сообщений: 140
|
||||||
| 13.10.2015, 11:00 [ТС] | ||||||
|
Немного ошибся в коде, вот правильный исходник (без использования функции Code)
Кликните здесь для просмотра всего текста
Добавлено через 18 часов 11 минут Проблема все еще актуальная, надеюсь на вашу помощь. Добавлено через 12 часов 54 минуты Ну неужели никто из форумчан не пытался написать нейронную сеть и не сталкивался с такими проблемами?
0
|
||||||
|
2649 / 1660 / 267
Регистрация: 19.02.2010
Сообщений: 4,393
|
|
| 19.10.2015, 22:03 | |
|
Я, например, писал и пишу. Много разных нейронок, успешно. Но не на питоне.
Как совет чисто наугад - попробуйте уменьшить шаг обучения на 2-3 порядка. 0.01 - это слишком много.
1
|
|
|
32 / 32 / 19
Регистрация: 13.07.2011
Сообщений: 140
|
|
| 19.10.2015, 22:43 [ТС] | |
|
VTsaregorodtsev, Попробовал не использовать активационную функцию на входном слое сети, стало получше достаточно, но тем не менее, хотелось бы узнать, почему без активационной функции на входном слое работает нормально, а с ней нет.
Спасибо за помощь, я уж думал, тема канет в лету ![]() Добавлено через 18 минут VTsaregorodtsev, Но почему-то везде пишут, что шаг обучения 0.1 слишком маленький и сеть будет обучаться достаточно долго е время и даже предлагают ставить в начале обучения что-то вроде 0.9, а потом уменьшать со временем
0
|
|
|
2649 / 1660 / 267
Регистрация: 19.02.2010
Сообщений: 4,393
|
||
| 19.10.2015, 22:55 | ||
|
Значит, производные как-то не так считаете. Скорее всего.
Блин, я же где-то пару раз на форуме писал способ отладки таких нейронок... Убираете нафиг все нелинейности отовсюду, в качестве обучающей выборки берёте лежащие на линейной функции y=x точки, добиваетесь стабильного снижения ошибки до уровней где-то 10^-6, дальше не надо. Затем повторяете это для обучающей выборки для линейной функции от нескольких переменных (типа y=a+b+c). Ну или в качестве дополнительных входных переменных берёте просто шум. А вот когда такая кастрированная "линейная" нейронка будет брать любые линейные функции при любом числе слоёв в нейронке и любом числе нейронов в слоях (кроме последнего - там число нейронов жёстко задаётся задачей и руками крутить его нельзя) - ставите на нейроны нелинейность (может, не на все слои нейронов - а только на какой-то один) и проводите тесты обучения заново с простейшего случая. Точность при этом можно будет снизить, до 10^-3, например. И, вообще, надо понимать, что наряду с отладкой кода нейронки Вы отлаживаете ещё и метод оптимизации (выбор шага обучения - оттуда), и допиливаете приемлемую для задачи/нейронки схему масштабирования данных на входе-выходе. В общем, рекомендуется взять и прочитать 1-2-3... других учебника по многослойному персептрону и/или обратному распространению для полного охвата картины. Правда, щас среди учебников полно кривого неадеквата (как, например, УлГУшное пособие "Интеллектуальные информационные системы" (там есть раздел по нейронкам, несмотря на название)), либо всё равно не даётся нужное (с моей точки зрения) описание. Добавлено через 10 минут Ну и я гляжу, у Вас умножение на шаг встречается в выражении для коррекции синапсов каждого слоя. А это просто неоптимально. Можно домножить на шаг только лишь ошибки, подаваемые на выход сети. Далее они автоматически пройдут по сети в ходе обр.распространения и никуда не денутся. Если не верите - разбирайтесь с принципами алг. обратного распространения
1
|
||
|
32 / 32 / 19
Регистрация: 13.07.2011
Сообщений: 140
|
|
| 19.10.2015, 23:15 [ТС] | |
|
VTsaregorodtsev, Да нет, как раз таки верю. Когда искал что-то по этой теме, натыкался на ваши сообщения и ваш сайт и, как мне кажется, вы тут единственный кто превосходно разбирается в этой области
![]() Может быть вы посоветуете все же какие материалы (учебники) можно почитать по НС, чтобы обстоятельно вникнуть в суть вопроса. А то сколько не искал: везде пишут либо одно и то же, либо что-то невразумительное.
0
|
|
|
2649 / 1660 / 267
Регистрация: 19.02.2010
Сообщений: 4,393
|
|
| 21.10.2015, 21:54 | |
|
RamonN, давно не слежу за уровнем "для чайников" (а редкие студенты приносят такииииие доморощенные "шедевры" в виде ВУЗовских методичек, что обычно рекомендую выкидывать).
0
|
|
| 21.10.2015, 21:54 | |
|
Помогаю со студенческими работами здесь
7
Нейронная сеть Нейронная сеть по статье Нейронная сеть на питоне Простейшая нейронная сеть Нейронная сеть (распознование) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|