|
|
|
|
Рейтинг 4.80/25:
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
|||||||||||||||||||||||||||||||
Проблема с обучением простой нейронной сети методом Левенберга-Марквардта04.09.2019, 17:22. Показов 6654. Ответов 69
Метки метод левенберга-марквардта (Все метки)
На простом примере сформулирую свой вопрос. Сеть ниже прекрасно обучается методом Левенберга
Вот процесс обучения https://youtu.be/eL8rE4VMBMA Как видим всего 12 итераций На вход подаю (с шагом 0.05) 17 точек x = 0.1:0.05:0.9, на выходе надо получить параболу: y = (2*x - 1).^2 + 0.1; (синие точки на видео и в программе). Программа написана на матлабе специально в упрощенном виде так, чтобы каждый мог ее легко понять. Кликните здесь для просмотра всего текста
Опишу подробно каждую функцию. Кликните здесь для просмотра всего текста
Формула для матрицы Якоби Матрица ниже есть раскрытие матрицы выше. Многоточие означает дополнительные строки для каждого х. Всего 17 строк. Кликните здесь для просмотра всего текста
Кликните здесь для просмотра всего текста
Перехожу к моей проблеме. Рассмотрим похожую сеть с двумя выходами Каждый выход должен нарисовать свою параболу. Изменения в функциях ниже Кликните здесь для просмотра всего текста
Проблема моя в том что я не знаю как посчитать матрицу Якоби для "функции" с двумя выходами. Есть вариант считать последовательно для первого выхода J и dE, и обновлять веса, затем для второго выхода J и dE и обновлять веса. Но этот метод работает не так хорошо как функции net в матлабе. В матлабе эта сеть обучается за 10-30 итераций, а этот способ последовательного обновления дает десятки тысяч итераций. Можно минимизировать функцию ошибки сети Но это тоже не работает: https://youtu.be/ekuE5zfobOo Считал я это так: Не по теме:
Кликните здесь для просмотра всего текста
0
|
|||||||||||||||||||||||||||||||
| 04.09.2019, 17:22 | |
|
Ответы с готовыми решениями:
69
Решение системы интегральных уравнений методом Левенберга-Марквардта Проблемы с обучением нейронной сети |
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
|
| 11.09.2019, 14:22 [ТС] | |
|
Неясно также как работают единицы. С одной стороны с ними обучение гораздо быстрее, но с другой т.к. сигмойд ведь почти не меняется за +/- 7, то в чем же смысл значений единиц(посмотрите напр 14.2936, -7.5627, -7.4926...)
0
|
|
|
3131 / 1722 / 273
Регистрация: 19.02.2010
Сообщений: 4,513
|
||
| 11.09.2019, 22:23 | ||
|
Возможно, влияние взятых Вами сигмоид. Любые нецентрированные (по выборке) сигналы в сети - это рост обусловленности матрицы Гессе, т.е. рост овражности целевой функции. И любая ошибка с выбором шага обучения - выкидывает состояние сети из оврага куда-то вдаль, после чего обучение может начинаться с начала (если у Вас график значений целевой функции уменьшается при обучении плавно - то указанной проблемы нет, но при скачках суммарной ошибки вверх - это именно потеря локальности выполняемой оптимизации). Ну и выполняйте останов обучения пораньше. Точность er < 10^(-4) - может быть избыточна. ХЗ что у Вас за требуемые данные на выходе сети - но не нужно ставить точность выше, чем точность получения этих данных. Т.е. если нет в ответных данных цифр на четвёртой позиции после запятой - то, значит, абсолютно бредово требовать точность до 0.0001.
1
|
||
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
||||||
| 12.09.2019, 13:42 [ТС] | ||||||
|
Спасибо. Заменил сигмойд на тангенс, поднял ошибку и добавил функцию, которая находит в матрицах весов u v значения большие 7 и делит их пополам каждые 50 итераций. Ответ во вложении. Можно сказать, что эта "проблема" решена. Кавычки потому, что это скорее только у меня в голове, не проверено как это все может сказаться на окончательном результате. Я думаю что исходные данные (7 точек дуги - отсюда 14 входов) избыточны. Может быть достаточно было бы 4-х точек. Эта избыточность и вызывает выбросы весов. Вот добавленная функция сокращающая выбросы весов
Кликните здесь для просмотра всего текста
0
|
||||||
|
3131 / 1722 / 273
Регистрация: 19.02.2010
Сообщений: 4,513
|
|||
| 12.09.2019, 20:03 | |||
![]()
0
|
|||
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
|
| 19.09.2019, 16:31 [ТС] | |
|
Попробую описать путь решения задачи отыскания центра тела по небольшому куску его контура. На одном форуме мне намекнули что такие задачи решаются с помощью нейросетей. Тогда я имел самое поверхностное представление о нейросетях. Затем встретил https://www.youtube.com/watch?... QJY7L4gL3I и увидел, что это совсем не так сложно как казалось вначале. Мысль о том что человек почти всегда по куску контура может легко определить центр не оставляла меня. В самом деле если человек может, но не знает как он это делает, то почему бы эту способность не вложить в систему коэффициентов-весов? Как делать сеть? Надо взять куски дуг, скажем четвертинки круга, расположенные в разных местах круга, взять скажем по три точки (расположенные равномерно) на каждой дуге и координаты всех их последовательно подавать на вход какой-нибудь простейшей сети. Центр мы знаем — значит легко можем обучить сеть. Так я и сделал и (ура!) получил на выходе центр круга. Какую бы дугу с этого круга я не брал всегда на выходе получал правильный центр круга. Затем попробовал взять дугу из другого, смещенного круга, но в результате получил центр все того старого круга, т.е. моя сеть оказывается научилась выдавать только один и тот же центр что бы я ни подавал на ее вход. Вот и приехали. Затем началась длинная история упражнений чтобы сеть выдавала две различные точки, три... научился аппроксимировать параболы и т.д. Постепенно прояснился градиентный спуск, но только для простых сетей. Для простых т.к. перед написанием кода уходил день на дифференцирование, т.к. бэкпроп почему то отличался от того что я получал на бумаге. Но мне было не до бэкпропа, надо было решать задачу. Код надо было писать с нуля, я не мог полагаться на готовые пакеты для нейросетей, т.к. затем надо было передавать код программисту для процессора. После того как т.о. градиентный спуск был освоен надо было создавать базу данных для обучения сети. Мой реальный фрейм меня не интересовал, т.к. легко обращался в любой прямоугольник. Было ясно что надо проводить симуляцию на единичном квадрате (ввиду ограничения сигмойдов). Естественно было начать с круга, взять на нем дуги, каждая в его четверть, причем дуги взять внахлест как показано на рис ниже
На каждой дуге можно для начала выбрать три точки: на концах по одно и одна в середине. Тогда у сети будет 6 входов (каждая точка две координаты X Y). Возьмем четыре окружности и на каждой по 16 дуг, каждая дуга три точки для каждой дуги известен ее центр Так построим данные для обучения сети 4*16 = 64 строки. Каждая строка 6 + 2 = 8 чисел. 6 - координаты точек дуги и 2 - координаты центра дуги. Возьмем какую-нибудь простую сетьскажем из 4-х нейронов одного слоя и двумя выходами и обучим ее градиентным спуском, получим примерно такой результат: Вверху на графике 1000 - число итераций, 0.00606489 - ошибка сети 14.450 - максимальное отклонение от истинного центра выраженное в пикселях. В центре красные точки - это тест сети, результат обучения которой - зеленые точки. er = 0.008911 - ошибка сети, md = 26.92 - макс ошибка в пикселях. Поскольку эта симуляция чисто геометрическая важно было получить максимальную ошибку в пикселях +/- 1 пиксель (на реальных данных она будет больше). Высокая ошибка в центре видимо из-за того что слабую сеть не удалось натянуть на весь единичный квадрат. Поэтому добавил еще круг с 16-тью дугами в центр квадрата и получил нечто похожее: Красные точки это тесты. Я уже не помню какая там была сеть, интересно что там 10 миллионов итераций, что уже неприемлемо. И это только круг. Надо было переходить к эллипсу, все дуги получить на нем. Но у эллипса кроме центра добавляется угол поворота: А ниже результаты работы какой-то моей сети, может и двуслойной Как видим все очень плохо, ошибка неприемлемая. Вообще я много игрался, экспериментировал и с сетями и с данными для тренировки. Кроме того таблетка поворачивается, и нужно чтобы сеть работала и с кругом и с эллипсом одновременно и для разных длин дуг (что отдельная катастрофа). В конце концов встал вопрос: как избавится от необходимости натягивать сеть на весь квадрат, на все углы ориентации? Может есть у кого-нибудь соображения как избавится? Продолжу на следующей неделе.
0
|
|
|
483 / 427 / 205
Регистрация: 04.03.2011
Сообщений: 1,259
|
|
| 19.09.2019, 17:56 | |
|
Как эллипс интерполировать? Какая цель главная?
0
|
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
||
| 19.09.2019, 18:11 [ТС] | ||
|
Вот здесь пост 66 и далее подробней Простейшая нейронная сеть для аппроксимации параболы Таблетки совсем не обязательно эллипсы.
0
|
||
|
483 / 427 / 205
Регистрация: 04.03.2011
Сообщений: 1,259
|
|
| 19.09.2019, 18:16 | |
|
А по касательным нельзя?
0
|
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
||
| 19.09.2019, 18:20 [ТС] | ||
|
0
|
||
|
483 / 427 / 205
Регистрация: 04.03.2011
Сообщений: 1,259
|
|
| 19.09.2019, 18:28 | |
|
Если контур произвольный, то октуда извесно: эллипс это или парабола?
0
|
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
||
| 19.09.2019, 19:39 [ТС] | ||
|
0
|
||
|
483 / 427 / 205
Регистрация: 04.03.2011
Сообщений: 1,259
|
|
| 19.09.2019, 20:34 | |
|
Тренированная сеть сможет отличить круг от эллипса?
0
|
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
||
| 19.09.2019, 22:27 [ТС] | ||
|
0
|
||
|
483 / 427 / 205
Регистрация: 04.03.2011
Сообщений: 1,259
|
|
| 19.09.2019, 23:21 | |
|
Как найти центр не зная эллипс это или круг?
0
|
|
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 20.09.2019, 00:05 | |
|
Зная размер таблетки сделать контур от 3д модели таблетки с большим допуском
например тут 10 пикселей. Взять N положений и сделать такие маски всем. Прикладывая зеленые маски к растру считаем в какую маску вошло больше всего пикселей. Получаем примерную ориентацию таблетки. Дальше можно уточнить взяв меньше шаг поворота и более узкий контур. В итоге если нужно точно найти ориентацию можно не перебирать например 200 положений а постепенно увеличивать точность. Такой классификатор похоже на дерево. Тут не нужна нейросеть, но как не касячить с выделением контуров я незнаю…поиски контуров объектов могут выдавать такое ( рис внизу) Простейшая нейронная сеть для аппроксимации параболы
0
|
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
||
| 20.09.2019, 00:15 [ТС] | ||
|
nuHrBuH, представьте себе конвейер по которому движутся таблетки плотно соприкасаясь. Камера сверху снимает этот конвейер, его кусок и выдает фреймы. Программа находит все контуры и нарезает их на дуги. Там где есть касание нет контура. Поэтому получаются обрывки дуг. Таблетки все одинаковые, все их размеры известны и в пикселях тоже. Но встречаются и бракованные по форме и даже по цвету таблетки. Их программа должна опознать. Итак, есть априорно известный контур правильной таблетки и множество отдельных дуг (массивов чисел). Эти дуги надо объединить в группы дуг относящиеся к отдельной таблетке. Т.о. можно установить сколько в данном фрейме таблеток. Как объединить дуги в группы дуг принадлежащие одной таблетке? Один из способов установить для каждой дуги центр таблетки и по близости друг от друга этих центров можно объединить дуги в группы. Как по куску дуги найти центр таблетки? Например наложением дуги на нормативный, известный заранее, контур таблетки. Как это делать — особый разговор. Человек, глядя на кусок дуги, почти всегда может как то интуитивно определить примерное положение центра таблетки. Предлагается вместо человека и вместо наложения дуги на нормативный контур (эта процедура медленная) использовать нейросеть. Форма таблеток может быть и не эллипс и не круг. Есть другой проект когда камера снимает падающие таблетки, там все сложнее.
Чем занимаюсь я в этой теме? Не реальностью. Я придумал задачу предварительную такую: есть окружность, ее радиус известен. Она может поворачиваться и превращаться в эллипс с осями a = R и b = от R до R/2. Далее предположим что даны только какие то четвертинки=дуги полного периметра контура (круга или эллипса). Как по ним находить центр всего тела? Понятно что геометрия меня не интересует в данном случае. Это же только упрощенный пример на котором следует научить сеть. Теперь яснее стало? Добавлено через 3 минуты
1
|
||
|
483 / 427 / 205
Регистрация: 04.03.2011
Сообщений: 1,259
|
|
| 20.09.2019, 00:56 | |
|
Кроме дуг больше ничего нету?
Изображения можно обработать?
0
|
|
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 20.09.2019, 10:36 | |
|
Чтобы детектировать разные формы таблеток можно сделать 3д модель через скан поверхности по фотке “структурированный свет ”
Тут очень много свертки изображения с маской( вот та зеленая), возможно для ускорения работы уменьшить размер фото опять же сверткой. “перевод RGB 64x64 в растр в 8x8” Странное поведение при классификации изображений Понятия не имею зачем резать на дуги усложняя матан, проще детектировать сразу весь контур, будет сразу два зайца: 1)принадлежность отдельных контуров одному телу 2) центр тела Дальше обычный подсчет пикселей, в каких координатах какая маска набрала больше всего пикселей та и победила. Может даже простой фильтр выделения границ тоже прокатит как сырая обработка фотки, т.к. маски большие и крупные, схожим образом работают глубокие нейросети это называют детектор фичей. feature detection А вот когда контур принадлежащий таблетке найден, нужно будет наверно анализировать шероховатость контура чтобы увидеть где сколы поверхности. А если скол повернулся и смотрит прям в камеру а алгоритм контура обводит гладкий периметр таблетки? Тогда брак пройдет….вот тут альтернатив 3д скану поверхности просто нет. Вот вам и снова нужен 3д скан, снова структурированный свет. Простейшая нейронная сеть для аппроксимации параболы
0
|
|
|
47 / 15 / 1
Регистрация: 26.08.2017
Сообщений: 162
|
|
| 20.09.2019, 14:07 | |
|
На мой взгляд не нужно выпендриваться с маргинальными датасетами, есть XOR для начала и MNIST как завершающая точка всей катавасии с нейросетями. Метод Левенберга-Марквардта MNIST не проглотит, укакается, да и зачем? Обычный Mlp({ 196, 100, 50, 20, 10 }, lr=0.01, mom=0.1, epohs=50) делает <2.3% за 3 минуты, а хвалёный NeuroPro пол часа будет мучиться, как и MatLab наверно, если вообще сможет.
0
|
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
||||||
| 20.09.2019, 17:16 [ТС] | ||||||
|
Напоминаю свой вопрос:
0
|
||||||
| 20.09.2019, 17:16 | |
|
Проблемы с обучением LSTM нейронной сети Как же обучать автокодировщик? Непонятная ситуация с обучением нейронной сети Метод Левенберга - Марквардта Алгоритм Левенберга-Марквардта Применение алгоритма Левенберга-Марквардта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
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С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|