|
|
|
|
Рейтинг 4.66/88:
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
||||||||||||||||
Простейшая нейронная сеть для аппроксимации параболы08.05.2019, 16:18. Показов 21180. Ответов 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 |
|
3129 / 1719 / 273
Регистрация: 19.02.2010
Сообщений: 4,511
|
||
| 18.05.2019, 09:02 | ||
![]() Ибо забавные у Вас выходят размышления: 1) Правильно считать градиент Вы не научились - но для обучения нейронки хотите перейти к методам использования вторых производных. Видимо, с Вашей точки зрения, их правильно посчитать - проще Но почему-то забываете (или не увидели в формулах), что по прежнему надо будет считать-использовать вектор градиента.2) Желание взять более быстро сходящиеся методы оптимизации (из-за надуманной проблемы якобы медленного обучения "простыми" методами) - видимо, Вы ещё не знаете о том факте, что решение СЛАУ или обращение матрицы выполняется за 3) Исходя из предыдущего пункта - полный и беспросветный тупик любому увеличению размеров нейросетки сильно выше сотни нейронов (цифра чисто как ориентир порядка величины). Ибо в матрицах из нескольких тысяч столбцов на несколько тысяч строк (матрица же выйдет по числу синапсов в сети - а не нейронов) начнёте огребать вычислительные проблемы с накоплением ошибок округления, надо будет от "наивных" методов решения СЛАУ или обращения матриц переходить к специально созданным для решения задач большой размерности. В итоге в совокупности прогнозирую вот это:
0
|
||
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
||||
| 18.05.2019, 21:11 [ТС] | ||||
|
0
|
||||
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
||||||
| 21.05.2019, 13:18 [ТС] | ||||||
|
Вот ход моих мыслей. Прямую линию одним нейроном аппроксимировать научился, перешел к параболе из 9-ти точек. А не попробовать ли аппроксимировать три точки? Так и сделал:
Кликните здесь для просмотра всего текста
и вот что получил: https://youtu.be/X5J0EQSgho4 Эта программка targ_two_2n_3p_forforum по случайным весам w создает случайную ломаную y1 и находит максимальную абсолютную ошибку (от трех заданных красных точек параболы). maxerr возвращает ошибки d d1 d2 и индекс этой точки j (1, 2 или 3). Только для этой точки j ф-ция f_df вычисляет выходы нейронов (f1 f2) и их производные (df1 df2). Ф-ция d_w вычисляет значения добавок для каждого веса (массив dw). Скорость обновления весов (массив а) я сделал параболически возрастающей (ф-ция a_by_num). При 4000 итераций максимальной отклонение менее 0.01. После обновления весов (строка 15) ф-ция по новым весам находит новую ломаную y1 = ynet(x, w); (эта ф-ция внутри maxerr), новую максимальную ошибку и ее индекс j. Если получил это для трех точек, то почему бы это не попробовать для 9-ти точек параболы. Всего то надо заметить в строке 8 в коде x = (0.1:0.1:0.9)'; Тогда можно увидеть нечто подобное:https://youtu.be/-gqixOw7Jcs При том же количестве итераций абсолютное значение максимальной ошибки в данном случае менее 0.03 Оказывается то же самое можно делать не только для точки с максимальной ошибкой, но с любой случайной данной точкой. Интересно что массив dw это то же самое что и производная ф-ции ошибки сети dE, где Е = 0.5*(y1 - y), где y = w5*f(xw1+w3)+w6*f(xw2+w4), y1 - значение y для конкретных весов w. А главная ошибка моих предшествующих программ была в том что искал эту dE для всех точек (x, y), а следовало ее искать для одной конкретной точки(xi, yi). Ясно что это только начало, что малая ошибка достигнута силой, а не умом. Теперь следует подключить сюда оптимизацию второго порядка.
0
|
||||||
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
||||||
| 18.06.2019, 16:31 [ТС] | ||||||
|
Мне удалось научить сеть методом Левенберга-Марквардта. На сей день пока сети однослойные.
Вот код для двух нейронов Кликните здесь для просмотра всего текста
не указанные в этом коде функции приведены в предшествующих постах. Видео работы кода https://www.youtube.com/watch?... e=youtu.be Функция start возвращает не первую попавшуюся последовательность весов, а немного подправленную: сначала создаю 100 случайных векторов (по 6-ти в каждом векторе). Затем отбираю наилучший, затем еще некоторые преобразования, уличшения его. (не пишу об этом подробно поскольку вряд ли это кому то нужно, да и в дальнейшем в других сетях с ростом числа нейронов этот механизм не нужен, т.е. и без него все работает)
0
|
||||||
|
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,820
|
|
| 18.06.2019, 20:29 | |
|
А я так и не понял, а что MLP не справился с параболой?
0
|
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
||
| 18.06.2019, 21:38 [ТС] | ||
|
0
|
||
|
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,820
|
|
| 19.06.2019, 04:59 | |
|
Задача нечетко поставлена, хз.
0
|
|
|
3129 / 1719 / 273
Регистрация: 19.02.2010
Сообщений: 4,511
|
|
| 19.06.2019, 10:07 | |
|
Ну, проще же от нейронки потребовать хз что - чем самостоятельно и явно, например, с помощью метода наименьших квадратов, решить задачу аппроксимации набора точек контура эллипсом.
Ну, или преобразование Хафа использовать для поиска эллипсов / частей эллипсов. Сколько там получается у преобразования параметров - 5 (икс, игрек, угол поворота, размеры по большой и по малой оси)? Тяжело же в пространстве такой размерности перебирать комбинации, а затем искать экстремумы
0
|
|
|
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,820
|
||
| 19.06.2019, 16:05 | ||
|
Первый слой научится лишь окружать точки точно в определенных координатах изображения, понадобятся еще слои, которые будут обобщать первичные данные. MLP чувствителен к положению и размерам объектов на изображении, CNN менее чувствителен, но тоже не ахти. Самое забавное, что вы хотите алгоритм, который собственно должен измерять положение тех самых объектов. То есть эта парочка вам не подходит. А вы про одноклеточные нейронки...
0
|
||
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
||||
| 19.06.2019, 18:09 [ТС] | ||||
|
Я почти всегда стараюсь упростить задачу. Начал с простейшей НС из двух нейронов. А вот как работает сеть с одним слоем в котором 20 нейронов https://www.youtube.com/watch?... e=youtu.be Вот такую сложную функцию легко аппроксимирует. Там уже через матрицы все сделал. Код не привожу, т.к. он видимо никого не интересует. Данные для тренировки сети: x1 x2 x3 y1 y2 y3 xo yo - восемь чисел. Таких строк 32. ![]() Сеть должна по заданным трем точкам находить центр окружности. Такая сеть сгодится или нужно соединить x и y?
0
|
||||
|
820 / 579 / 75
Регистрация: 20.09.2014
Сообщений: 3,820
|
|
| 19.06.2019, 19:36 | |
|
Так в этой задаче центр можно находить по одной точке... зачем три точки?
0
|
|
|
3129 / 1719 / 273
Регистрация: 19.02.2010
Сообщений: 4,511
|
||
| 19.06.2019, 20:07 | ||
|
Если только у Вас таблетки не падают настолько редко, что в кадре НИКОГДА не могут контачить друг с другом. Но тогда Вы страдаете фигнёй - нафиг поиск контуров, нафиг нейросетки, можно просто на контрастном фоне искать области пикселов другого цвета (таблеточные). И затем простое вычисление среднего координат пикселов в каждой несвязной области сразу даст Вам центр соответствующей таблетки независимо от её поворота (хоть по оси на неё будете смотреть, хоть под углом, хоть с ребра).
0
|
||
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
|||
| 19.06.2019, 21:45 [ТС] | |||
|
Таблетки падают соприкасаясь друг с другом, контуры случаются разорванными. Поэтому задача в том чтобы как минимум по четверти контура находить центр тела. Если для двух кусков их найденные центры окажутся близки - значит эти куски принадлежат одному объекту. Если же уже есть скажем 3/4 или более контура, то ясно что ни НС ни аппроксимация не нужны, достаточно среднего значения. Центр тел нужен не только для объединения отдельных дуг, но и для отслеживания падающих тел между соседними фреймами.
0
|
|||
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
||
| 20.06.2019, 07:54 [ТС] | ||
|
0
|
||
|
47 / 15 / 1
Регистрация: 26.08.2017
Сообщений: 162
|
|||||||
| 20.06.2019, 17:54 | |||||||
|
Внимательно наблюдаем за ловкостью рук:
0
|
|||||||
|
3129 / 1719 / 273
Регистрация: 19.02.2010
Сообщений: 4,511
|
||
| 20.06.2019, 23:06 | ||
|
Вариант - кинь такую ссылку для способа вычисления определителя матрицы, если не использовать быстрый (Штрассена, Копперсмита-Винограда и т.д.) алгоритм перемножения матриц. Да - обязательно для матриц произвольного размера, т.е. не ограничиваясь 3*3. Т.е. чтобы и для 100*100 работало, и для 1000*1000. А совать в виде доказательства очередной говнокод, в котором даже не проверяется / не обрабатывается возможность деления на ноль (при нулевом определителе матрицы) - не надо Тем более, что там и в функции вычисления определителя (строка 126) тоже нет проверки деления на ноль - а уж вероятность-то встречи хотя-бы одного нулевого элемента в матрице гораздо выше, чем вероятность встречи матрицы с нулевым определителем
0
|
||
|
47 / 15 / 1
Регистрация: 26.08.2017
Сообщений: 162
|
|||
| 21.06.2019, 00:26 | |||
|
0
|
|||
|
3129 / 1719 / 273
Регистрация: 19.02.2010
Сообщений: 4,511
|
|||
| 21.06.2019, 11:23 | |||
![]() Попробуй обратить диагональную матрицу (с любыми рандомными числами на главной диагонали) - узнаешь, где/когда дешёвый-сердитый школьный алгоритм применим. Давай код, который работает на всех структурах матриц (с любым возможным заполнением нулями - т.е. и диагональных, и блочно-диагональных, и блочных, и просто с нулём в любом элементе) - тогда и поговорим о вычислительной сложности алгоритма, который это делает. А именно - векторизация (SIMD-команды, неизвестные софту прошлого тысячелетия) расчётов сама по себе должна была дать прирост в скорости в 4/8 раз (в 8 - если под AVX компилировать и юзать флоаты, а не даблы). Прошедшее за 20 лет улучшение компиляторов - дополнительный множитель >1. Так что увы - ты не быстрее, ты максимум дотянул до референсной точки 20летней давности ![]() А уж если вспомнить, что ты упорно пытаешься сравнивать реализации СОВЕРШЕННО РАЗНЫХ АЛГОРИТМОВ (MLP - это не алгоритм, это структура нейросетки, а батч-обучение по направлению, отличному от направления наискорейшего спуска, с адаптивным на каждой эпохе шагом и онлайн-обучение с постоянным неадаптивным шагом- это КАЧЕСТВЕННО РАЗНЫЕ АЛГОРИТМЫ) - то, наверное, неспроста ты так задачу сравнения ставишь Видимо, в одних и тех же рамках тебе ловить совершенно нечего
0
|
|||
|
47 / 15 / 1
Регистрация: 26.08.2017
Сообщений: 162
|
|||
| 23.06.2019, 16:39 | |||
|
0
|
|||
|
3129 / 1719 / 273
Регистрация: 19.02.2010
Сообщений: 4,511
|
|||
| 23.06.2019, 21:56 | |||
|
Ты не фантазируй про "по идее" - а доказывай. Доказывай использование вторых производных или любых их оценок (например, левенбергом-марквардтом, в обоих его видах - "наивном" и диагональном ЛеКуновском) в той древней проге. Более того - доказывай зависимость алгоритма подбора шага обучения (я ведь правильно понимаю слова о "динамической скорости обучения"?) от этих вторых производных. А когда докажешь - не забудь указать, каков там вклад этих вычислений в общую вычислительную сложность. Может, там вычислений делается в 100 раз больше, чем у тебя?
0
|
|||
| 23.06.2019, 21:56 | |
|
Нейронная сеть для распознавания лиц
Нейронная сеть для распознавания чисел Нейронная сеть для сайта Asp.net Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка 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 реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|