|
|
|
|
Рейтинг 4.66/88:
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
||||||||||||||||
Простейшая нейронная сеть для аппроксимации параболы08.05.2019, 16:18. Показов 21245. Ответов 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 |
|
3131 / 1727 / 273
Регистрация: 19.02.2010
Сообщений: 4,518
|
||
| 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
|
|
|
3131 / 1727 / 273
Регистрация: 19.02.2010
Сообщений: 4,518
|
|
| 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
|
|
|
3131 / 1727 / 273
Регистрация: 19.02.2010
Сообщений: 4,518
|
||
| 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
|
|||||||
|
3131 / 1727 / 273
Регистрация: 19.02.2010
Сообщений: 4,518
|
||
| 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
|
|||
|
3131 / 1727 / 273
Регистрация: 19.02.2010
Сообщений: 4,518
|
|||
| 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
|
|||
|
3131 / 1727 / 273
Регистрация: 19.02.2010
Сообщений: 4,518
|
|||
| 23.06.2019, 21:56 | |||
|
Ты не фантазируй про "по идее" - а доказывай. Доказывай использование вторых производных или любых их оценок (например, левенбергом-марквардтом, в обоих его видах - "наивном" и диагональном ЛеКуновском) в той древней проге. Более того - доказывай зависимость алгоритма подбора шага обучения (я ведь правильно понимаю слова о "динамической скорости обучения"?) от этих вторых производных. А когда докажешь - не забудь указать, каков там вклад этих вычислений в общую вычислительную сложность. Может, там вычислений делается в 100 раз больше, чем у тебя?
0
|
|||
| 23.06.2019, 21:56 | |
|
Нейронная сеть для распознавания лиц
Нейронная сеть для распознавания чисел Нейронная сеть для сайта Asp.net Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства.
Жизнь действительно предъявляет каждому. . .
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
|
|
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины".
За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html
Задача: . . .
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|