|
|
|
|
Рейтинг 4.66/88:
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
||||||||||||||||
Простейшая нейронная сеть для аппроксимации параболы08.05.2019, 16:18. Показов 21199. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|