Форум программистов, компьютерный форум, киберфорум
C++: ИИ, нейросети, ML, агенты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 08.03.2019
Сообщений: 46

Обучение нейронной сети методом обратного распространения ошибки

28.07.2019, 15:41. Показов 10503. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
пишу нейронную сеть типа многослойный персептрон, для решения задачи аппроксимации функции. Знаю что есть много ресурсов с готовым продуктом, но хочется сделать именно свое. Пишу на C++. суть проги такова в режиме обучения она считывает x и y с текстовых файлов, затем корректирует веса и сохраняет их в другие текстовые файлы. при работе НС должна повторить эту функцию y=f(x); Обучал методом BP (back propagation) . Однако при обучении все веса в слое одинаковы!! Какой-то дикий гон, но исходя из матетматики так и получается, вопрос что делать? Я самоучка и поэтому мог что-то не так понять или упустить.Так же прикрепляю документы со значениями весов w1 - между входным слоем и скрытым, w2 - между скрытым слоем и , выходным, w3 - веса нейрона смещения сдвигающего нейроны скрытого слоя. Прощу вашей помощи.
Вложения
Тип файла: txt w1.txt (1.1 Кб, 10 просмотров)
Тип файла: txt w2.txt (1.1 Кб, 6 просмотров)
Тип файла: txt w3.txt (1.1 Кб, 4 просмотров)
Тип файла: txt Листинг.txt (8.1 Кб, 18 просмотров)
Тип файла: xlsx Лист Microsoft Excel.xlsx (23.4 Кб, 6 просмотров)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.07.2019, 15:41
Ответы с готовыми решениями:

Нейронные сети. Алгоритм обратного распространения
Ребят помогите мне срочно нужно реализовать на C++ алгоритма обратного распространения. Кто с таким сталкивался? Может кто нибудь поможет я...

Нейронные сети,Метод обратного распространения ошибки
:help:Кто нибудь знает,где взять работающюю программу на C++ по теме: "Метод обратного распространения ошибки" не очень...

Алгоритм обратного распространения ошибки. Нейронные сети
Прошу помощи с реализацией алгоритма обратного распространения ошибки. Написал программу реализующую многослойный персептрон. Но никак не...

5
2630 / 1642 / 266
Регистрация: 19.02.2010
Сообщений: 4,361
28.07.2019, 22:47
Лучший ответ Сообщение было отмечено kaiten11 как решение

Решение

Вместо pow(2.71,..) есть готовая функция exp().
Выходному нейрону тоже желательно добавить смещение.
Скорость обучения завышена на 2-3 порядка.
Дельты (нейронам предыдущего слоя) надо посчитать до того, как изменили веса текущего слоя. И для скрытого слоя дельты - не скалярное значение! Их число будет равным числу нейронов (т.е. на каждый нейрон скрытого слоя придёт своя дельта).

Ну и данные могут быть не подходящими для нейросети. Есть такое умное слово - предварительная нормировка (нормализация, масштабирование) данных. А то если входы сети большие по амплитуде - то сигмоидная нелинейность может выходить на асимптоты, а там её производная=0, т.е. веса нейрона с зашкалившей сигмоидой обучаться потом не будут.

Добавлено через 1 минуту
Также зашкаливание сигмоид может происходить при больших начальных весах в сети.
1
0 / 0 / 0
Регистрация: 08.03.2019
Сообщений: 46
29.07.2019, 00:47  [ТС]
А вот про дельты можете подробнее? Необходиме расчитать дельты для всех весов а только потом их корректировать от конца к началу?
Дельта не скалярное, для скрытого слоя она является взвешенной суммой дельт нейронов выходного слоя, ведь так?
0
2630 / 1642 / 266
Регистрация: 19.02.2010
Сообщений: 4,361
29.07.2019, 01:21
Дельты и веса можно считать-корректировать послойно.
Для некоторого слоя нейронов (неважно, скрытый или выходной):
1) на выходы нелинейностей нейронов приходят производные (дельты).
2) пропускаем эти дельты через нелинейности назад - домножаем их на производные нелинейностей.
3) считаем дельты для предыдущего слоя. На каждый предыдущий нейрон придёт взвешенная (веса будут те, по которым этот предыдущий нейрон рассылал свои выходы дальше) сумма получившихся в п.2 дельт.
4) вот теперь можно корректировать веса слоя - их изменившиеся значения на вычисление взвешенных сумм в п.3 не повлияют.
Т.е. у Вас п.3 и п.4 были переставлены местами (плюс п.3 был неверно сделан).

Цитата Сообщение от kaiten11 Посмотреть сообщение
Дельта не скалярное, для скрытого слоя она является взвешенной суммой дельт нейронов выходного слоя, ведь так?
Да, но один нейрон скрытого слоя рассылал свой сигнал через одни веса, другой нейрон - через другие. Вот и суммируемые дельты на каждый нейрон придётся взвесить с учётом именно тех весов, через которые ранее шли выходные сигналы этого нейрона.
0
0 / 0 / 0
Регистрация: 08.03.2019
Сообщений: 46
29.07.2019, 03:26  [ТС]
выходной нейрон один, и в итерационном цикле это я учел при вычислении взвешенной дельты, перенес вычисление дельт перед вычислением весов связей, обучаться стала дольше, однако при этом обучения не происходит , диапазон изменения выходного сигнала сети от 0,506035 до 0,506075. И никак не поменять ее, диапазон изменения выборки от 0.1 до 0.7. фаил 111 это переделанный листинг .
Вложения
Тип файла: txt 1111.txt (9.5 Кб, 3 просмотров)
0
0 / 0 / 0
Регистрация: 08.03.2019
Сообщений: 46
29.07.2019, 03:38  [ТС]
проверил код

C++
1
2
3
4
for (i = 0; i < 90; i++)// вычисление градиентов 1-2 слоем
                        {
                            deltas[i] = m[i] * (1 - m[i]) * delta * w2[i];
                        }
deltas[i]=массив дельт для связей между 1-2слоем;
delta= дельта для связей между 2-3 слоем, она умножается на w[i] = соответствующий вес между 2-3 слоем;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.07.2019, 03:38
Помогаю со студенческими работами здесь

Метод обратного распространения ошибки
Здравствуйте! Решил попробовать свои силы по программированию нейронных сетей и столкнулся с проблемой. На вход подаются изображения 64x64...

Метод обратного распространения ошибки
Всем доброго времени суток. Прошу не удалять тему, она больше к теории относится, нежели к практике. Пишу простенький редактор для работы с...

Нейронные сети обратного распространения
Здравствуйте. Пытаюсь обучить сеть таблице умножения. Обучает до 1*3, а дальше не получается у него. Подскажите в чем беда. class...

Обучение нейронной сети - алгоритм обратного распространения ошибки(learning_tree)
struct SAcson { int l,c; // строка, столбец float x; // заряд }; struct SSinapc { int l,c; // строка, столбец }; ...

Обучение нейронной сети методом обратного распространения ошибки
При обучении созданной на C# нейронной сети возникли сложности. Используется сигмоидная функция активации и архитектура нейронной сети с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru