|
|
|
|
Рейтинг 4.66/88:
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
||||||||||||||||
Простейшая нейронная сеть для аппроксимации параболы08.05.2019, 16:18. Показов 21689. Ответов 229
Метки нет (Все метки)
Пробую написать свою первую нс из двух нейронов. На выходе простой сумматор.
http://images.vfl.ru/ii/155731... 2257_m.png Задаю значения х = [0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9] и по ним получаю y = (2*x-1)^2 + 0.1 см график ниже http://images.vfl.ru/ii/155731... 2396_m.png у - это зеленый точки (соединенные просто для понимания) синими линиями. y = [0,74 0,46 0,26 0,14 0,1 0,14 0,26 0,46 0,74]. Исходные значения х и y задаю в квадрате 0-1 чтобы избавиться от нужды в нормализации. Голубая линия - это выход сети (его обозначаю в дальнейшем y1), который получаю так: сначала задаю случайные веса от -0.5 до 0.5: w = rand(6,1)-0.5; и по ним вычисляю выход сети: y1 = ynet(x, w); (код на матлабе специально писал предельно просто, развернуто, без матриц)
http://images.vfl.ru/ii/155731... 2684_m.png Пробую это делать тремя способами и ни один не работает и не понимаю почему. Способ 1. Нахожу производную от ф-ции ошибки сети по весам (как по формулам приведенным на рис выше) и соответственно ей изменяю веса (w1 = w - a*dE; w = w1)
http://images.vfl.ru/ii/155732... 2811_m.png В чем тут дело? В чем ошибка? Через десяток итераций сеть перестает обучаться. Способ 2. Меняю веса по градиенту Е, но вычисленному после каждого x(i) и y(i), но результат такой же, похожий Способ 3. Меняю веса через вычисление обратного распространения ошибки
0
|
||||||||||||||||
| 08.05.2019, 16:18 | |
|
Ответы с готовыми решениями:
229
Нейронная сеть для аппроксимации Нейронная сеть для функции Не работающая нейронная сеть для xor |
|
1 / 1 / 0
Регистрация: 06.02.2019
Сообщений: 217
|
|
| 29.09.2019, 16:40 | |
|
0
|
|
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 29.09.2019, 17:06 | |
|
А почему ей не быть актуальной?
Темы на форуме не только для ТС, а и для всех пользователей и гостей т.е. для создания интересного контента привлекающего людей. Наверняка найдется 100500 чел которые заходят сделать работающий пример. Скорей всего так будет и через 10 лет…
0
|
|
|
1 / 1 / 0
Регистрация: 06.02.2019
Сообщений: 217
|
||
| 29.09.2019, 17:08 | ||
|
0
|
||
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
|
| 29.09.2019, 17:26 [ТС] | |
|
YagDen, спасибо за желание помочь. Эта задача решена, но есть еще до конца не решенная:
на стр Проблема с обучением простой нейронной сети методом Левенберга-Марквардта посты 36 и 25 (можно читать в этом порядке) поясняют вопрос. Исходная задача такая: как по куску дуги (части контура) на изображении найти центр тела с помощью НС.
0
|
|
|
1 / 1 / 0
Регистрация: 06.02.2019
Сообщений: 217
|
||||||
| 29.09.2019, 17:42 | ||||||
|
Попробуйте так. Может получится.
Не ручаюсь, что заработает, но попробуйте. Должно получиться. Отпишитесь, пожалуйста, заработало или нет. Если нет, попробуйте speed = 0.05
0
|
||||||
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
|
| 29.09.2019, 17:52 [ТС] | |
|
Спасибо. Попробую немного позднее.
0
|
|
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|||
| 29.09.2019, 19:04 | |||
|
delta = abs(f(x) - o3) // модуль значение функции минус ответ сети Почему берется ошибка в одной точке а не в N? Может лучше брать сумму квадратов ошибок в N точках а X задавать? f(x) по рис автора X от 0 до 1, брать 10 точек. Net(x) //ответ нейросети delta =(f(0.0) - Net(0.0) )^2+(f(0.1) - Net(0.1) )^2+…+(f(1.0) - Net(1.0) )^2 Или сложить все и в квадрате. Инициализация весов рандом в каком диапазоне? speed от 0 до 1? Или это абстрактное число и нет предела? А как правильно делать примеры для обучения? Два варианта: 1)Нужно сгенерировать массив векторов a,b длинной например 10 000. Где “a” это рандом от 0 до 1 он же X, “b” это f(a), он же f(x) параболы. А разве примеры не нужно разбить на 3 равных куска Train, Test и Validation? На Train обучать, на Test считать loss Кстати а зачем так? Затем тест Eror ошибка на примерах из Validation показывает настоящую ошибку. 2)Не хранить примеры а генерировать их налету от рандом генератора. А примеры нужно перемешивать если сгенерированы в массиве перед каждой эпохой?
0
|
|||
|
1 / 1 / 0
Регистрация: 06.02.2019
Сообщений: 217
|
||||||||||||||
| 29.09.2019, 20:35 | ||||||||||||||
|
в конкретной точке N. Если ее продифференцировать в этой точке, то и получится 2 * (f(x) - o3). Двойку можно выкинуть т.к. лишние вычисления, а значением speed можно регулировать значения всех коррекций весов.
0
|
||||||||||||||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
||
| 30.09.2019, 00:05 | ||
|
Задаю веса нейросети слайдерами от -1 до 1 для теста, функция что рисует нейросеть очень слабо реагирует на изменение весов, X от -1 до 1, фактически всегда горизонтальная прямая. Тут ошибки нет?
0
|
||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 30.09.2019, 00:46 | |
|
по памяти сделал тоже самое что и у вас.
s1=x*w1+1*w3 o1=sig(s1) s2 = x*w2+1*w4 o2=sig(s2) s3= o1*w5+ o2*w6 o3= sig(s3) может мало нейронов? Сейчас выглядит как сеть с 3 нейронами вообще не имеет потенциала аппроксимировать параболу… Простейшая нейронная сеть для аппроксимации параболы 9 нейронов что ли было…а веса много больше -1…1.
0
|
|
|
1 / 1 / 0
Регистрация: 06.02.2019
Сообщений: 217
|
||
| 30.09.2019, 01:22 | ||
|
Добавлено через 9 минут
0
|
||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|||
| 30.09.2019, 10:03 | |||
|
YagDen, а у вас получилось обучить этой параболе?
Покажите веса? Может у меня где-то косяк? Пробовал уже разные скорости и пределы весов. Все бесполезно. Количество обучающих примеров это итерации, а количество проходов по примерам это эпохи. Так? 1)При таскании слайдерами всех весов вручную с пределами -10 10 выглядит как нейросеть физически не способна описывать такую параболу где X от 0 до 1, Y от 0 до 1. Может неправильное количество нейронов\ архитектура сети? 2)Функция активации сигмоида 1 / (1 + exp(-x)) Имеет близкий к линейному участок не на интервале Y=0 до Y=1 а Y=0.34 Y=0.66 Что может сильно замедлять обучение, может правильно подкорректировать функцию параболы f(x) так чтобы она была от X=0.34 до X=0.66? Может неудобное для сети задание f(x)? 3)Может неправильно генерировать примеры обучения где получаем рандом вектора на параболе? Подавать всегда случайно выбранное f(x) в 10 точках с равномерным шагом на параболе? Может неправильное обучение? 4) 5) Несколько раз попадались хорошие аппроксимации очень малого куска параболы, Выглядит как алгоритм постоянно падает в локальный минимум скорость нахождения которого сильно нелинейная функция от скорости обучения и случайной удачи в выборе как пределов весов так и их значений. Выглядит больше как издевательство а не обучение. Я бы сказал что это корректней назвать не обучение а нелинейная оптимизация в поиске 7 неизвестных параметров(скорость обучения, все начальные веса). Целевая функция это скорость уменьшения ошибки. Получается поиск нелинейной целевой только параметров чтобы запустить поиск другой целевой минимума ошибок аппроксимации…
0
|
|||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 30.09.2019, 11:12 | |
|
Вручную, пределы весов -20 20
Поведение НС настолько нелинейно что тут даже грубым перебором сложно найти будет экстремум, что говорить о градиенте… и всяких там улучшениях типа момента. Исключительно плохая математическая модель. Напрашивается мысль что сама изначальная идея создания нейросети это просто специальный прикол плохого математика.
0
|
|
|
47 / 15 / 1
Регистрация: 26.08.2017
Сообщений: 162
|
||||||||
| 30.09.2019, 13:41 | ||||||||
0
|
||||||||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 30.09.2019, 15:00 | |
|
danila_zaytcev, Эти формулы правильные? Где же ошибка?
Простейшая нейронная сеть для аппроксимации параболы Ну почему не получается уже с попытки 985 =)). Напишите свои формулы вот в этом стиле выше просто текст без всяких Latex. Какие у вас веса нашлись? А почему у вас активация тангенс а строит ломанную? Какая инициализация весов, сколько примеров в эпохе.
0
|
|
|
1 / 1 / 0
Регистрация: 06.02.2019
Сообщений: 217
|
|||
| 30.09.2019, 17:23 | |||
|
0
|
|||
|
47 / 15 / 1
Регистрация: 26.08.2017
Сообщений: 162
|
||||||||
| 30.09.2019, 17:59 | ||||||||
|
Конфигурация сети после инициализации весов: Layer0 : N0 : w0: 0.736 w1: 0.088 out: 0 err: 0 N1 : w0: 0.873 w1: -0.103 out: 0 err: 0 Layer1 : N0 : w0: -0.056 w1: 0.24 w2: -0.562 out: 0 err: 0 После обучения: Layer0 : N0 : w0: 0.824 w1: 2.835 out: 1 err: 0.0004 N1 : w0: 0.833 w1: -2.892 out: 0.855 err: -3.6 Layer1 : N0 : w0: -12.5 w1: 12.495 w2: 26.193 out: 24.379 err: -0.326 10000 эпох по 11 примеров, лернрэйт 0.001 "ломаная" так как 11 точек всего, между точками линейная интерполяция, если будет 1000 точек будет всё очень гладенько. код:
0
|
||||||||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|||
| 30.09.2019, 19:07 | |||
|
А кто из них кто w1,w2,w3,w4,w5,w6?
Что это w2: -0.562 (w??) вес w7 как это? Layer0 : N0 : w0: 0.736 (w1) w1: 0.088 (w3) out: 0 err: 0 N1 : w0: 0.873 (w2) w1: -0.103 (w4) out: 0 err: 0 Layer1 : N0 : w0: -0.056 (w5) w1: 0.24 (w6) w2: -0.562 (w??) out: 0 err: 0 Или это 2д вектора из 10 точек с постоянным шагом 0.1 по X и Y=f(x) которые просто перемешиваются на новой эпохе? Так: X=0.0 Y=f(X) X=0.1 Y=f(X) X=0.2 Y=f(X) …. X=1.0 Y=f(X) Добавлено через 37 минут danila_zaytcev, У вас другое устройство сети. Это нейрон смещения? Обозначают вроде bias bias = w7 //нейрон смещения тогда нейросеть такая? s1=x*w1+1*w3 o1=sig(s1) s2 = x*w2+1*w4 o2=sig(s2) s3= o1*w5+ o2*w6+ bias o3= sig(s3)
0
|
|||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 30.09.2019, 20:26 | |
|
попробовал так:
w0: 0.736 (w1) w0: 0.873 (w2) w1: 0.088 (w3) w1: -0.103 (w4) w0: -0.056 (w5) w1: 0.24 (w6) w2: -0.562 (w7) sig(x)=tanh(x) o3(x)= sig(sig(x*w1+1*w3)*w5+ sig(x*w2+1*w4)*w6+ w7) опять не рисует параболу. Значит веса выше у меня напутаны или функция НС неправильная. С гиперболическим тангенсом сеть намного резвей чем сигмоида. Веса хорошо влияют на форму кривой НС. А нельзя сделать код без специфических команд на СИ указателей и ссылок? Понятия не имею что это: Строка№ 1. void mlp2Forward(mlp2* mlp, double input[]) Указатель что ли и массив. Строка№ 3. for (int l = 0; l < mlp->layerCount; ++l) Никогда такого не видел. Обычно так for (int i = 0; i < a; i++) Строка№ 5. что это за команда? mlp->Inputs[l] = input; Строка№ 12-14. указатели вроде называют хз =)). Так и не понял эту тему в С++. out = mlp->af.f(out); mlp->Out[l][n] = out; mlp->Drv[l][n] = mlp->af.df(out);
0
|
|
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 30.09.2019, 20:42 | |
|
Похоже все дело в нейроне смещения, он сильно влияет на форму. Без него никак параболу не сделать там. Даже вручную неплохо решает.
YagDen, Можете изменить формулы для учета нейрона смешения w7? sig(sig(x w1 + w3) w5 + sig(x w2 + w4) w6 + w7)
0
|
|
| 30.09.2019, 20:42 | |
|
Нейронная сеть для распознавания лиц
Нейронная сеть для распознавания чисел Нейронная сеть для сайта Asp.net Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|