Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/200: Рейтинг темы: голосов - 200, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 10
1

Нейронные сети

03.06.2011, 22:21. Показов 38280. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер!
Можете подсказать где есть много примеров по нейронным сетям...?
Хотелось бы посмотреть и изучить!

Покидайте прог) спс) это не для универа, а для себя) так как учёба уже закончилась)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.06.2011, 22:21
Ответы с готовыми решениями:

Нейронные сети (адаптивные сети)
нужен исходник 3д или 2д адаптивной сетки для небольшого использования в своей работе...

Нейронные сети
Недавно открыл для себя тему нейросетей, и хотел бы спросить ресурс где бы я смог довольствоваться...

Нейронные сети
Добрый вечер, товарищи. Прошу у вас помощи по нейронным сетям. Есть обучающие выборка, там...

Нейронные сети на C++
Доброго времени суток. Решил начать изучать нейронки, попытался обучить нейросеть с обратным...

18
4 / 4 / 0
Регистрация: 07.01.2011
Сообщений: 85
04.06.2011, 03:19 2
http://www.heatonresearch.com/
http://www.heatonresearch.com/book/cat/1

Но там по C# больше.
На Русском увы не знаю, если кто знает подкиньте ссылок.
Присоединяюсь к вопросу.
0
49 / 49 / 14
Регистрация: 08.04.2011
Сообщений: 124
04.06.2011, 09:23 3
http://netcode.ru/cpp/?lang=&k... artID=3994
0
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 12
12.06.2013, 21:57 5
Добрый вечер)
Начал изучение нейронных сетей. На С++ написал многослойный персептрон.
Попробовал решить простейшую задачу - XOR ( исключающее ИЛИ ). Создал сеть из двух слоев. В скрытом слое - 2 нейрона, в выходном слое - 1 нейрон. У сети два входа. Активационная функция - F(x)= 1/ ( 1 + exp( 2 - 4*x ) ).

На вход и выход подаю:
0 0 | 0
0 1 | 1
1 0 | 1
1 1 | 0

В итоге сеть не обучается, если веса генерировать рандомно. Сеть способна обучиться только задав определенную комбинацию весов.
Применив гиперболический тангенс - сеть обучается при рандомных весах. НО!!! Как я понял, гиперболический тангенс предназначен для данных в диапазоне от -1 до +1. Т.е. обучающая выборка должна выглядеть следующим образом:
-1 -1 | -1
-1 1 | 1
1 -1 | 1
1 1 | -1
Но в этом случае сеть не обучается.

В общем буду благодарен за разъяснения, что я упустил?
0
1487 / 1414 / 240
Регистрация: 19.02.2010
Сообщений: 3,915
12.06.2013, 22:17 6
Almaz1988, эту активационную функцию - в морг.
Сначала вообще уберите акт.функцию - оставьте у нейронов только адаптивные сумматоры. И добейтесь, чтобы прога с любым числом слоёв и нейронов в них обучалась воспроизводству линейных зависимостей (типа y=x) на единичном отрезке или в единичном кубе. Ну и несколько выходов в сети при этом протестируйте - на одном требуйте y=x, на другом, например, у=-x или у=-0.5x. Точность (если брать средний квадрат ошибки) обучения чтобы везде достигалась не ниже 10 в минус 6 степени (дальше можно прекращать обучение и копейки точности не выжимать).
Вот когда на вырожденной в линейную сетке отладите и обратное распространение (на любое число слоёв), и найдёте приемлемый интервал шага обучения, и т.д. - вот тогда и будете переходить к простановке и тестированию работоспособности нелинейностей.

Гип.тангенс съест любые данные. Данные, в конце концов, проходят через обучаемые коэффициенты.

Ну и в меньшей степени по теме. Задача xor есть полный мастдай, ибо это никакая не репрезентативная статистическая выборка (а нейросеть при решении задачи классификации аппроксимирует именно оптимальный байесов классификатор). Так что не удивляйтесь, если для xor Вам потребуется несколько тысяч эпох обучения, тогда как, например, для гораздо более сложной задачи распознавания рукописных цифр MNIST достаточно 30-50 эпох.
2
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 12
14.06.2013, 01:29 7
авк

Добавлено через 4 минуты
VTsaregorodtsev, как вы и сказали - выкинул активационную функцию, т.е. на выход нейрона подается значение его сумматора.
Опробовал обучение линейным зависимостям типа y=(x1+x2)/2 на однослойных и двухслойных персептронах. Получилось). Столкнулся с явлением возникновения неустойчивости в системе, когда при большой скорости обучения происходят большие результирующие изменения синаптических весов и выходы сети уходят в зашкал. В общем пришел к эвристическому выводу, описанному в книгах: "скорость обучения поменьше, эпох обучения побольше и будет счастье":-).
Завтра опробую трехслойную сеть; опробую динамическую скорость обучения, чтобы снизить количество необходимых эпох для обучения; посмотрю что даст пакетный режим обучения.
Но все же остается один главный вопрос - как обучать сеть нелинейностям?)
0
1487 / 1414 / 240
Регистрация: 19.02.2010
Сообщений: 3,915
16.06.2013, 19:35 8
Да так и обучать. Поставите на нейроны гип.тангенс, нормировку входов сделаете в интервал [-1,1] или приведёте их к единичному среднему и единичной дисперсии - и всё будет оптимально.
Ну и веса синапсов надо случайно генерировать не сильно большими по модулю - где-нибудь в интервале [-0.5,0.5] или даже более узком. Чтобы не было насыщений нелин.функции.
В качестве тестовой задачи можно взять прогнозирование временного ряда - синуса или суммы синусов с разными периодами. Сгенерируйте сотню-две точек (так, чтобы синус с самым большим периодом два-три периода туда уложил), и по 5-10 предыдущим точкам прогнозируйте значение в следующей.
Я весной делал трём девушкам программы с прогнозирующими нейросетками - так в качестве универсального теста брал именно синусы. Вот кусок скриншота одной из прог - видно, что маленькая сетка (с 5 нейронами на скрытом слое) при средней амплитуде сигнала повыше, чем 5000, имеет среднюю попримерную ошибку обучения на уровне 200 единиц, т.е. около 4% от этой среднесигнальной амплитуды. Синим на картинке дан исходный сигнал, зелёным - ответ обученной сети, красным - прогноз на 4 точки вперёд. 15 нейронов если поставить - то средняя ошибка обучения около 120 единиц.
Миниатюры
Нейронные сети  
2
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 12
16.06.2013, 21:17 9
Кстати о нормализации входов. В книгах ( книжке Хайкина например ) рекомендуют к приведении к нулевому среднему. Правильно ли я понимаю этот механизм?
Допустим 2 входа сети, подаем 3 примера:
0.3 0.5
0.4 0.5
0.2 0.5
Данный набор входных данных не нормализован, т.к. среднее значение равно 0.4.
Для нормализации входа ( приведению к нулевому среднему ) нужно отнять 0.4 из каждого значения во входном массиве:
-0.1 0.1
0.0 0.1
-0.2 0.1.
Но в той же самой книге ничего не сказано о том, что делать с выходами? Ведь для обучения линейной зависимости необходимо выходные значения необходимо изменить на то же самое число. А при обучении нелинейной зависимости ( например у = sin x ) как вообще производить нормализацию? Ведь просто вычитание исказит обучающую выборку!
0
1487 / 1414 / 240
Регистрация: 19.02.2010
Сообщений: 3,915
19.06.2013, 22:35 10
Надо для каждого входа считать его среднее - и его отнимать.
Выходы тоже нужно (можно) нормализовывать. Что, есть какая-то проблема потом прибавить ранее вычтенное? Школьная алгебра, вообще-то (если y=a+b, причём b - некоторая константа, то а из этого уравнения найти проще простого)
0
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 12
23.06.2013, 15:22 11
Прикрутил к проекту библиотеку openCV и визуализировал процесс обучения нейронной сети функции y = sin( x ) в диапазоне x = [0;4.2] ( в радианах ).
Процесс обучения сохраняется в видеофайле:
http://files.mail.ru/53199D5AE... 1D332FED46
VTsaregorodtsev, спасибо за помощь)
0
0 / 0 / 0
Регистрация: 28.02.2015
Сообщений: 3
28.02.2015, 18:13 12
Добрый день, VTsaregorodtsev,

вы приводите скриншот приложения, которое прогнозирует некий колебательный процесс(как вы пишете, синус).
Уточните, пожалуйста, правильно ли я понимаю, что:
1. по введенному число входов(на скрине их 5) рассчитывается следующее значение ряда, далее это значение подается на вход вместе с другими 4мя и расчитывается следующее значение и т.д. Т.е. формируется зеленая и красная линии графика.
2. Получается, что сеть имеет структуру: 3 слоя, 5 входов, 1 скрытый слой состоящий из 5 нейронов(как показано на скрине), и 1 выход. Верно?
3. Используется ли какая-либо активационная функция в данной программе? Ведь формально, как я понимаю, она не требуется в данном случае. Гиперболический тангенс? Если используется, то зачем? Ведь как я понимаю, подобного рода функции требуются для получения на выходе 0 или 1, а в программе выход рассчитывается выходящий за эти пределы. Или тут происходит т.н. нормализация входов/выходов?

Очень буду благодарен, если поделитесь исходником сего инженерного чуда.

Заранее большое спасибо за ответ!
0
1487 / 1414 / 240
Регистрация: 19.02.2010
Сообщений: 3,915
01.03.2015, 22:07 13
Ranorien,
1. Не совсем так. По 5 входам прогнозируется следующее значение, и график из этих спрогнозированных значений рисуется рядом с исходным графиком. Т.е. при рисовании зелёной линии - ошибка прогнозов не накапливается. Красная линия - да, это уже прогноз с учётом рекуррентной подачи спрогнозированного значения на вход сети, там ошибка может накапливаться (вряд ли будет самоисправляться, т.е. если прогноз пошёл в неправильную сторону - то это навсегда).
2. Правильно
3. Используется, гип.тангенс на скрытом слое. Ибо многослойная сеть без нелинейностей эквивалентна однослойной (одному слою нейронов) без нелинейностей же. Линейная комбинация линейных комбинаций есть линейная комбинация, как нас учит математика. Поэтому на скрытые слои - таки обязательно ставить нелинейность. Причём есть задачи, где наличие нелинейности и на вых.слое может быть полезным (там, правда, всё уже начинает зависеть от используемой целевой функции (особенно для задачи классификации, а не прогнозирования), и/или от схемы нормировки целевых данных).
Нормализация входов и выходов - да, происходит, каждой переменной в отдельности (я вроде бы там маштабировал каждую переменную к нулевому среднему значению и единичной дисперсии). Обратные формулы вывести для перевода прогнозов сети в реальный интервал переменной - школьная математика.

Исходниками бесплатно не делюсь, увы
1
0 / 0 / 0
Регистрация: 28.02.2015
Сообщений: 3
01.03.2015, 23:10 14
VTsaregorodtsev,

Спасибо за ответ! Появилось представление, как в итоге это все должно выглядеть.
Получается, что если не использовать нелинейность, то нейронная сеть сводится к регрессионной модели вида y(i) = a0 + a1*y(i-1) + a2*y(i-2) + a3*y(i-3) + ... +am*y(i-m),
где коэффициент a1, a2, ..., am(m-число входов, i - прогнозируемая точка) - рассчитываются, например, через МНК(по сути тоже самое, что и метод обратного распределения ошибки в нейронных сетях, как я понимаю). Т.е. в итоге, однослойная нейронная сеть без нелинейности - это и есть т.н. регрессионная модель. Верно я понимаю? Так же из курсов Моделирования процессов и ТАУ помню, что для описания колебательного процесса достаточно модели второго порядка(y(i) = a0 + a1*y(i-1) + a2*y(i-2)). Проводя аналогию с нейросетями, получается, что для прогнозирования колебательного процесса будет достаточно однослойной сети с двумя входами и 1 выходом. Верно?

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

Еще раз спасибо!
0
1487 / 1414 / 240
Регистрация: 19.02.2010
Сообщений: 3,915
01.03.2015, 23:29 15
Да, так точно, сводится.
Но МНК - это МНК, а нейросетке можно дать и другую целевую функцию (и способ обучения=оптимизации значений коэффициентов методом обратного распространения от этого не изменится, надо будет только для этой целевой функции её производные посчитать, ибо они будут отличны от производных для МНК). Так что нейронка вполне может провести и линейную (авто)регрессию иным образом, чем МНК.

Не по теме:

Хватит или не хватит двух входов - это вопрос совсем не к той программе, из которой делался скриншот ;) Программа была для бизнес-задачи, по показателям финансово-экономической деятельности делать прогноз на следующие периоды, и девушка предполагала совать поквартальные данные. Т.е. 4 последних квартала и вдобавок ещё один назад в прошлое, чтобы была возможность увидеть-учесть как внутригодовую сезонность, так и иметь как минимум одну "точку"-ориентир аналогичного квартала год назад. Поэтому разные синусы - это чисто модельные-тестовые данные у меня были, чтобы показать девушке, что в наших политико-экономических условиях прогноз наивными методами эконом.данных - будет совершенно неточным, по сравнению с данными, в которых имеются явные и простые зависимости. Ну и чтобы просто доказать правильность работы проги - когда на "реальных" данных ошибка большая - нужно что-то, на чём можно было бы продемонстрировать получение лучшей точности.

Сайт - да, мой, но я не вступаю в приватную переписку по неинтересным мне вопросам. Моя активность тут на форуме - это просто самореклама, перед широкой аудиторией ;) Т.е. порепетировать за деньги - могу, тут на форуме в разделе фриланса продать исходники могу, а попереписываться по почте - увы, только по вопросам, сильно далеко выходящим за рамки нейросетевых учебников :)

1
0 / 0 / 0
Регистрация: 28.02.2015
Сообщений: 3
13.03.2015, 19:43 16
VTsaregorodtsev,

Спасибо за помощь! Вроде бы не плохо получилось...
Миниатюры
Нейронные сети  
0
59 / 52 / 11
Регистрация: 04.08.2015
Сообщений: 726
15.09.2018, 22:01 17
Добрый день, извиняюсь что тему поднимаю но не могли бы вы объяснить как корректировать весы через обратное распространение ошибки, я уже все что можно пересмотрел и а у меня до сихпор никак не хочет обучаться сеть..
Если делаю изменение весов то сеть просто падает из-за слишком большого значения весов, в общем просто скажите фурмулу по которой расчитывается как нужно изменить весы, с описанием того что внутри формулы

Добавлено через 5 часов 24 минуты
Кажется сделал чтобы работало, основной принцип корректировки весов это нахождение минимума ошибки, и на основании этой идеи добавил в нейрон еще одну переменную которая хранит уровень ошибки для конкретного веса от предыдущей корректировки, на основании этого значения и значения ошибки новой что в настояшей корректировки, нахожу разностью направление в котором уровень ошибки будет уменьшатся. Зная направление двигаю весы. Ошибку при передачи нейрону делю на количество связей которым нужно передать ошибку и умножаю на вес связи по которому передаем ошибку, при получении всех ошибок, нейрон их суммирует и получает общую для себя ошибку которая и используется для вычисления направления.

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

А вот обычный способ корректировки в котором участвует производная активационной функции, я так и не понял и настроить не вышло.. Так что если объясните... скажу спасибо)
0
1487 / 1414 / 240
Регистрация: 19.02.2010
Сообщений: 3,915
16.09.2018, 22:02 18
Цитата Сообщение от koker007 Посмотреть сообщение
Если делаю изменение весов то сеть просто падает из-за слишком большого значения весов
Скорость обучения (не знаю, какой переменной она обозначается в тех источниках, что Вы читали) поставьте на уровень 0.0001 или даже 0.00001.
1
0 / 0 / 0
Регистрация: 15.04.2018
Сообщений: 4
30.03.2019, 22:17 19
Простая, небольшая нейронная сеть в эксель https://yadi.sk/i/bGm4yf2WJSTQOQ Можно переделать под свои небольшие задачи
0
30.03.2019, 22:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.03.2019, 22:17
Помогаю со студенческими работами здесь

Книги по С++ и нейронные сети
Уважаемые форумчане, может кто посоветовать книги (или статьи в интернете) по созданию нейронных...

Капсульные нейронные сети
Здравствуйте! Подскажите, подходит ли фреймворк JUCE для реализации капсульной нейронной сети на...

Нейронные сети(персептрон)
Привет всем. Недавно начал изучать нейронные сети. Понравилось, очень интересно. Хочу...

Нейронные сети. Перцептрон Розенблата
Здравствуйте! Помогите разобраться в коде (напишите комментарии). Уже несколько дней пытался...

Как создать нейронные сети?
Всем привет! Меня зовут Айзада. Учусь на инженера-программиста. Сейчас пишу диплом. Пожалуйста,...

Нейронные сети и распознавание картинок
Недавно увлекся нейронными сетями, очень интересно стало. Написал их уже несколько, в том числе и...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru