Форум программистов, компьютерный форум, киберфорум
ИИ, нейросети, LLM, ML, Data Science, ИИ-агенты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200

Проблема с обучением простой нейронной сети методом Левенберга-Марквардта

04.09.2019, 17:22. Показов 6662. Ответов 69

Студворк — интернет-сервис помощи студентам
На простом примере сформулирую свой вопрос. Сеть ниже прекрасно обучается методом Левенберга



Вот процесс обучения https://youtu.be/eL8rE4VMBMA Как видим всего 12 итераций
На вход подаю (с шагом 0.05) 17 точек x = 0.1:0.05:0.9, на выходе надо получить параболу: y = (2*x - 1).^2 + 0.1; (синие точки на видео и в программе).
Программа написана на матлабе специально в упрощенном виде так, чтобы каждый мог ее легко понять.
Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function leven_parabola1
E = eye(12); % единичная матрица
[x y u v h] = start;
i = 0;
while 1
  [dE J] = grad_jac(u, v, x, y);
  [er u v] = one_step(E, dE, J, u, v, x, y);
  i = i + 1;
  h = draw(u, v, x, h, i, er); 
  if er < 10^(-4) || 50 < i
  % выход из цикла когда или ошибка меньше 0.0001 или число итераций больше 50
    break
  end
end
end

Опишу подробно каждую функцию.
Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function [x y u v h] = start
x = (0.1:0.05:0.9)'; % столбец входных х
y = (2*x - 1).^2 + 0.1; % парабола, которую надо получить на выходе
plot(x, y, '.'); % выводим параболу на график
u = rand(2,4); v = rand(4,1); % генерация двух матриц весов
y1 = fnet(x, u, v);  % функция сети получает значения у через веса сети
h = plot(x,y1,'-w');  % выводим эти значения на график
% h - указатель на линию x,y1 чтобы потом ее можно было стереть
end
function f = fnet(x, u, v)
% функция сети f = v1*f(xu11+u21)+v2*f(xu12+u22)+v3*f(xu13+u23)+v4*f(xu14+u24);
rows = size(x,1);
for i = 1:rows
  x1 = x(i,1);
  s1 = x1*u(1,1) + u(2,1);
  s2 = x1*u(1,2) + u(2,2);
  s3 = x1*u(1,3) + u(2,3);
  s4 = x1*u(1,4) + u(2,4);
  f1 = smd(s1); f2 = smd(s2);
  f3 = smd(s3); f4 = smd(s4);
  f(i,1) = f1*v(1)+f2*v(2)+f3*v(3)+f4*v(4);
end
end
function f = smd(x)
f = 1./(1+exp(-x)); % сигмоид
end
function [dE J] = grad_jac(u, v, x, y)
J = jacobi_mat(u, v, x); % J - матрица Якоби
y1 = fnet(x, u, v); d = y1 - y; % d - столбец разностей
dE = J'*d; % градиент (J' - символ ' - транспонирование матрицы J)
end

Формула для матрицы Якоби



Матрица ниже есть раскрытие матрицы выше.
Многоточие означает дополнительные строки для каждого х. Всего 17 строк.
Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function J = jacobi_mat(u, v, x)
% матрица Якоби для функции: y = v11*f1 + v21*f2 + v31*f3 + v41*f4
J = []; n = numel(x); % n - число элементов в массиве х (в данном случае n = 17)
for i = 1:n
  row = one_row(x(i), u, v);
  J = [J; row];
end
end
function row = one_row(x, u, v)
s1 = x*u(1,1)+u(2,1); [f1 df1] = sgm(s1);
s2 = x*u(1,2)+u(2,2); [f2 df2] = sgm(s2);
s3 = x*u(1,3)+u(2,3); [f3 df3] = sgm(s3);
s4 = x*u(1,4)+u(2,4); [f4 df4] = sgm(s4);
 
du11 = v(1,1)*x*df1;
du12 = v(2,1)*x*df2;
du13 = v(3,1)*x*df3;
du14 = v(4,1)*x*df4;
 
du21 = v(1,1)*df1;
du22 = v(2,1)*df2;
du23 = v(3,1)*df3;
du24 = v(4,1)*df4;
 
du = [du11 du12 du13 du14 du21 du22 du23 du24];
 
dv11 = f1; dv21 = f2; dv31 = f3; dv41 = f4;
dv = [dv11 dv21 dv31 dv41];
row = [du dv];
end
function [f df] = sgm(x)
f = 1./(1+exp(-x)); df = f.*(1-f); % сигмоид и его производная
end


Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function [er1 u v] = one_step(E, dE, J, u, v, x, y)
er = sumerr(x, y, u, v);
J2 = J'*J; % произведение транспонированной матрицы на себя - аппроксимация матрицы Гессе
m = 0.0001;
while 1
  H = J2 + m*E;
  H1 = H^(-1); % Н1 - обратная матрица к Н
  dw = H1*dE;  % dw - столбец изменения весов
  du = reshape(dw(1:8),4,2); % из первых восьми чисел dw создаем матрицу размером 4х2
  dv = reshape(dw(9:12),4,1); % из элементов с 9 по 12 столбца dw создаем матрицу 4х1
  % обновляем веса
  u1  = u - du'; % здесь транспонирование du необходимо ввиду того что du сейчас 4х2, а u 2х4
  v1 = v - dv;
  er1 = sumerr(x, y, u1, v1); % er1 - новая ошибка при новых весах
  if er < er1
    m = 2*m;
  else
    u = u1; v = v1; break
  end
end
end
function err = sumerr(x, y, u, v)
% err - суммарная ошибка сети при данных u, v
y1 = fnet(x, u, v);
d = y1 - y; err = sum(d.*d);
end

Перехожу к моей проблеме. Рассмотрим похожую сеть с двумя выходами



Каждый выход должен нарисовать свою параболу. Изменения в функциях ниже
Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function [x y u v h] = start
x = (0.1:0.05:0.9)'; % входной столбец значений х тот же самый
y1 = (2*x - 1).^2 + 0.1;  % парабола на верхнем выходе
y2 = -3*(x - 0.6).^2 + 0.9; % парабола на нижнем выходе
y = [y1 y2]; % выходной массив у состоит уже из двух столбцов
pot(x,y1,'.'); plot(x,y2,'.k'); % выводим два графика: первый синие точки, второй - черные
 
u = rand(2,4); v = rand(4,2); % матрица весов v состоит уже из двух столбцов
 
f = fnet(x, u, v); % функция сети выдает два столбца
h(1) = plot(x,f(:,1),'-c');
h(2) = plot(x,f(:,2),'-y');
end
function f = fnet(x, u, v)
% y1 = v11*f1 + v21*f2 + v31*f3 + v41*f4
% y2 = v12*f1 + v22*f2 + v32*f3 + v42*f4
rows = size(x,1);
for i = 1:rows
  x1 = x(i,1);
  s1 = x1*u(1,1) + u(2,1);
  s2 = x1*u(1,2) + u(2,2);
  s3 = x1*u(1,3) + u(2,3);
  s4 = x1*u(1,4) + u(2,4);
  f1 = smd(s1);
  f2 = smd(s2);
  f3 = smd(s3);
  f4 = smd(s4);
  f(i,1) = f1*v(1,1)+f2*v(2,1)+f3*v(3,1)+f4*v(4,1);
  f(i,2) = f1*v(1,2)+f2*v(2,2)+f3*v(3,2)+f4*v(4,2);
end
end

Проблема моя в том что я не знаю как посчитать матрицу Якоби для "функции" с двумя выходами. Есть вариант считать последовательно для первого выхода J и dE, и обновлять веса, затем для второго выхода J и dE и обновлять веса. Но этот метод работает не так хорошо как функции net в матлабе. В матлабе эта сеть обучается за 10-30 итераций, а этот способ последовательного обновления дает десятки тысяч итераций.
Можно минимизировать функцию ошибки сети



Но это тоже не работает: https://youtu.be/ekuE5zfobOo
Считал я это так:

Не по теме:

Кликните здесь для просмотра всего текста
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
function [J dE] = grad_jac(u, v, x, y)
f = fnet(x, u, v); d = f - y; % в d здесь два столбца
J = jacobi_matE(x, u, v, d); % матрица Якоби для функции ошибки сети Е
er = sum(d.*d,2);  % один столбец = сумма квадратов двух столбцов d
dE = J'*er; % градиент ?  
end
function J = jacobi_matE(x, u, v, d)
% матрица Якоби для ф-ции:
% E = 1/2*sum[(y1-Y1)^2+(y2-Y2)^2]
% y1 = v11*f1 + v21*f2 + v31*f3 + v41*f4
% y2 = v12*f1 + v22*f2 + v32*f3 + v42*f4
% аналитические выкладки дифференцирования не привожу, но все проверил
% через функцию численного дифференцирования. Результат совпал.
% если нужно могу это все описать подробно
n = numel(x); e = ones(n,1); xe = [x e]; 
s = xe*u; [f df] = sgm(s); J = [];
for i = 1:numel(x)
  df1 = df(i,:); f1 = f(i,:); dr = d(i,:);
  row = one_row(x(i), df1, f1, dr, v);
  J = [J; row];
end
end
function row = one_row(x, df, f, dy, v)
dE_du11 = x*df(1)*(v(1,1)*dy(1) + v(1,2)*dy(2));
dE_du12 = x*df(2)*(v(2,1)*dy(1) + v(2,2)*dy(2));
dE_du13 = x*df(3)*(v(3,1)*dy(1) + v(3,2)*dy(2));
dE_du14 = x*df(4)*(v(4,1)*dy(1) + v(4,2)*dy(2));
 
dE_du21 = df(1)*(v(1,1)*dy(1) + v(1,2)*dy(2));
dE_du22 = df(2)*(v(2,1)*dy(1) + v(2,2)*dy(2));
dE_du23 = df(3)*(v(3,1)*dy(1) + v(3,2)*dy(2));
dE_du24 = df(4)*(v(4,1)*dy(1) + v(4,2)*dy(2));
 
dE_dv11 = f(1)*dy(1);
dE_dv21 = f(2)*dy(1);
dE_dv31 = f(3)*dy(1);
dE_dv41 = f(4)*dy(1);
 
dE_dv12 = f(1)*dy(2);
dE_dv22 = f(2)*dy(2);
dE_dv32 = f(3)*dy(2);
dE_dv42 = f(4)*dy(2);
 
row = [dE_du11 dE_du12 dE_du13 dE_du14 ...
       dE_du21 dE_du22 dE_du23 dE_du24 ...
       dE_dv11 dE_dv21 dE_dv31 dE_dv41 ...
       dE_dv12 dE_dv22 dE_dv32 dE_dv42];
end

0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.09.2019, 17:22
Ответы с готовыми решениями:

Обучение сверточной нейронной сети LeNet-5 методом Левенберга Марквардта
Здравствуйте! Ранее задавал вопрос о формирований слоя C3 в калссической архитектуре LeNet-5...

Решение системы интегральных уравнений методом Левенберга-Марквардта
Доброго времени суток, уважаемые Гуру форума =) Появилась необходимость решить систему уравнений: \begin{cases} &amp; \text{ }...

Проблемы с обучением нейронной сети
Решаю задачу регрессии. Прогнозируемая величина изменяется в основном в пределах от 1 до 2, но иногда попадаются большие значения вроде 10,...

69
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
26.09.2019, 16:42
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от tur9 Посмотреть сообщение
Но поскольку четвертей четыре, то однозначности нет.
Есть. Неважно какая четверть попалась, поэтому и функции бета, альфа и L строятся для четверти+- мелкий нахлест.
Цитата Сообщение от tur9 Посмотреть сообщение
при неизвестности малой оси эллипса
Снова меняете условия. Этот мелкий алгоритм для известного и заданного эллипса а не рандомного.

Иначе угол альфа ничего не даст о центре, только его примерное положение. Тогда нужно будет подбирать a,b коэффициенты и читая растр смотреть какой это эллипс.
По сути это опять алгоритм Хафа? Может ускорить его например читая не все пиксели периметра а неким пунктиром?

Как я раньше не подумал набрать =)) в гугле Template Matching tablets
“. Medical Tablet Damage Detection Based on Circle Hough Transform.” Ну прям оно… и много других разных. ИМХО полезней изучить как они делали. Хотя б топ 10 ответов гугла.
0
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
29.09.2019, 17:38  [ТС]
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Есть. Неважно какая четверть попалась, поэтому и функции бета, альфа и L строятся для четверти+- мелкий нахлест.
Неоднозначность относится к месту дуги на контуре.
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Снова меняете условия. Этот мелкий алгоритм для известного и заданного эллипса а не рандомного.
Но нужен то алгоритм именно для рандомного.

Цитата Сообщение от Excalibur921 Посмотреть сообщение
Как я раньше не подумал набрать =)) в гугле Template Matching tablets
Ничего нужного там не нашел, может плохо искал. У меня уже предубеждение: потраченные на это силы не оправдывают себя почти никогда, за исключением стандартной теории, а она и в русскоязычном инете есть.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
30.09.2019, 16:32
Это тоже не хотите смотреть? Hough Transform ellipse

Добавлено через 41 минуту
Тут вообще жесть, полсотни алгоритмов по детектированию эллипсов. Наверно платная библиотека.
http://www.visionbib.com/bibliography/edge256.html
Жизни не хватит всех посмотреть…Бегло попался как вы и хотели
Further Five-Point Fit Ellipse Fitting,
0
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
10.10.2019, 17:13  [ТС]
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Это тоже не хотите смотреть?
Закончил я с аппроксимациями тем более что нужно детектировать не эллипс, а овальную фигуру, проекцию определенной фигуры.

Есть вопрос по НС.
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
С tanh (или любой иной симметричной относительно 0 нелинейностью) у нейронов скрытых слоёв - будет.
Ok.
Пока у меня один слой. И проблема у меня тоже одна.
Вы сказали, что это не нормально когда значения весов в несколько десятков и я проверяю все что сделал с этой точки зрения. Я выяснил, что во всех упражнениях от параболы до программы для нахождения центра тела по пяти точкам дуги, везде значения некоторых весов (двух, трех и более) превосходят несколько десятков и даже сотен. Везде стоит тангенс, везде Левенберг. Чтобы не углубляться возьму в пример простейшую НС с тремя нейронами и полуторной синусойдой:

вот результат после нескольких десятков попыток:

Здесь все отлично: 16 итераций, ошибка меньше 0.001, все веса меньше 10. Но этот результат получен случайно, а как правило результат получаю такого типа:

Здесь несколько весов уже перевалили за 50
Приведенная выше сеть с тремя нейронами не может аппроксимировать синусойду с двумя периодами (а только полтора периода может) потому что не хватает "мощности" сети. Если взять четыре нейрона, то такая сеть уже сможет и два периода аппроксимировать. А три нет. Для трех нужно добавить пятый нейрон.

Все это не более чем иллюстрация для моей проблемы. Рабочая сеть у меня с семью входами одним слоем от 5 до 9 (для разных случаев) нейронов и двумя выходами. Требуется получить небольшую ошибку, при этом число итераций достигает несколько сотен тысяч, а значения некоторых весов несколько сотен. Тем не менее не удается получить приемлемую ошибку. Увеличение числа нейронов почти не приводит к уменьшению ошибки. В чем тут может быть дело? В методе обучения или в чем то другом?
Можете что-то сказать или необходимо развернуть подробней детали моей задачи?

Еще раз:
1) можно ли считать сеть обученной если значения некоторых весов в несколько сотен?
2) если при обучении сети не достигается желательный уровень ошибки и интуитивно ясно, что дело не в мощности сети, то следует ли менять метод обучения, например перейти к генетическим алгоритмам?
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
10.10.2019, 17:45
Цитата Сообщение от tur9 Посмотреть сообщение
если значения некоторых весов в несколько сотен?
Никогда не встречал чтобы веса вообще имели значение. Важен loss, точность ответа.
Цитата Сообщение от tur9 Посмотреть сообщение
следует ли менять метод обучения, например перейти к генетическим алгоритмам?
0_0
А разве не очевидно добавить нейронов?

Добавлено через 8 минут
Еще не факт что подаете правильные данные сети. Нужно смотреть обучающую выборку.
Так и не понял зачем вам центр тела, вам кол-во штук считать? Зачем для этого центр и ореинтация?
Наверно до всей этой наукоемкой ерунды с нейросетями и прочим была просто воронка куда сыпали таблетки и фотореле по прерыванию луча считало количество.
0
3131 / 1727 / 273
Регистрация: 19.02.2010
Сообщений: 4,516
10.10.2019, 20:32
Цитата Сообщение от tur9 Посмотреть сообщение
Здесь несколько весов уже перевалили за 50
Заметьте, это только веса выходного нейрона.
Если ему от весов нужны такие "коэффициенты усиления" - значит, что-то неверно с нормализацией данных (либо, как вариант, выходному нейрону всё-таки не хватает bias'а).


Цитата Сообщение от Excalibur921 Посмотреть сообщение
Никогда не встречал чтобы веса вообще имели значение. Важен loss, точность ответа.
Во-первых, лосс на обуч.выборке ничего не говорит о способности сетки к обобщению.
Во-вторых, веса таки имеют значение, и это активно изучалось в 90ых. Как пример - статья 1996г https://papers.nips.cc/paper/1... etwork.pdf Специально даю ссылку только на ту работу, которая рассматривала задачу классификации - чтобы самообразование у народа не превращалось в халяву
Но могу намекнуть, что надо, например, поискать среди статей очень известного японского нейросетевика.
1
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
10.10.2019, 22:06  [ТС]
Цитата Сообщение от Excalibur921 Посмотреть сообщение
А разве не очевидно добавить нейронов?
Нет, не очевидно. Но всегда и добавляю, пробую и это, и в моей задаче получается что это почти не уменьшает лосс, но резко затягивает время обучения.
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Еще не факт что подаете правильные данные сети. Нужно смотреть обучающую выборку.
Вот здесь объяснил Проблема с обучением простой нейронной сети методом Левенберга-Марквардта Почему-то никто не просил что-то уточнить. Все понятно или ничего не понятно? Может я плохо объяснил?

Цитата Сообщение от Excalibur921 Посмотреть сообщение
Так и не понял зачем вам центр тела, вам кол-во штук считать? Зачем для этого центр и ореинтация?
Фрейм обрабатывается так: находятся все контуры, затем они нарезаются на дуги. Итак есть какое-то кол-во дуг. Некоторые из них принадлежат одному и тому же телу. Например есть 20 дуг, а тел только 15. Значит надо выяснить какие дуги относятся к какому телу. Если найти все центры тел, то если расстояние между центрами каких-то двух дуг мало, значит эти две дуги принадлежат одному и тому же телу. И кол-во считать и определять каждое тело не является ли оно браком. Ориентация не существенна.
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Наверно до всей этой наукоемкой ерунды с нейросетями и прочим была просто воронка куда сыпали таблетки и фотореле по прерыванию луча считало количество.
Верно. И такое было в начале.


Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Заметьте, это только веса выходного нейрона.
Если ему от весов нужны такие "коэффициенты усиления" - значит, что-то неверно с нормализацией данных (либо, как вариант, выходному нейрону всё-таки не хватает bias'а).
Теперь только заметил. Это наверное единственный раз такая однозначность. А вообще весов от входа до нейронов (u) порядка 50-70 и от нейронов к двум выходам (v) 10-20. И в той и другой группе полный разгул от -300 до 300, причем есть и меньшие по модулю 30, 10 и 1.

Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
веса таки имеют значение, и это активно изучалось в 90ых
Не могли бы вы хотя бы вкратце сказать какое значение имеют веса? Уже не имею возможности погружаться в подобные серьезные статьи, да и вряд ли она мне по зубам. Уже пора применять полученные сети к реальным объектам. Причем меня могут спросить отчего такой разброс в коэффициентах? Что тут можно ответить? Вылезла бяка сам не знаю почему, теперь сидеть она будет в процессоре вечно? Как вообще люди поступают когда веса зашкаливают? Так их оставляют или меняют алгоритм обучения? Есть какая-то устоявшаяся практика здесь?
0
3131 / 1727 / 273
Регистрация: 19.02.2010
Сообщений: 4,516
11.10.2019, 00:46
Цитата Сообщение от tur9 Посмотреть сообщение
Это наверное единственный раз такая однозначность.
Ну, тогда можно попробовать снизить на порядок скорость обучения - и посмотреть эффект.
Вернее, если у Вас в коде остался тот же вариант изменения скорости обучения, что и в стартовом посте этой темы (когда скорость увеличивалась в 2 раза, если ошибку на эпохе удавалось снизить) - то отключите такой сценарий. Т.е. попробуйте именно постоянный=константный шаг. Сначала - тот, который исходно установлен, затем уменьшенный в 10 раз.
И желательно для сравнения попробовать ещё и обучение обычным кондовым бэкпропом, без Л-М.


Цитата Сообщение от tur9 Посмотреть сообщение
Не могли бы вы хотя бы вкратце сказать какое значение имеют веса?
Влияние на производную выходного сигнала нейросетки по её входу. Т.е. чувствительность/неустойчивость решения к шумам на входе.

В том числе негативный эффект может проявляться там, где мала плотность обучающих данных.
Т.е. не надо думать, что нейронка всю свою "нелинейность" использует там, где ей это нужно для аппроксимации нелинейной зависимости выхода от входа. Она может немонотонно зааппроксимировать и монотонные участки - на приложенной картинке как раз и выделил такой кусок (где осцилляций даже в зашумлённом сигнале нет - а нейронка из-за малой плотности точек-эталонов провела там именно немонотонное решение).

Вот чтобы не было такого - и нужно стараться давить веса по амплитуде (или давить производные в обучающих точках). Естественно, так, чтобы это не начинало негативно влиять на точность обучения (т.е. вес регуляризующего=штрафного компонента - подбирается на практике под задачу). Меньшие по амплитуде веса и/или производные - это ликвидация (либо меньшая амплитуда) тех колебаний решения, которые нейронка добавила от себя.
1
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
11.10.2019, 17:02
1) Найти грубо центры таблеток размытием растра + порог.
Уже была последовательность фоток по этому.
2)Пространство Хафа.
Крутим и масштабируем кривую контура чтобы найти центр точней и ориентацию таблетки(угол поворота).
Либо прикладываем контур таблетки и крутим и двигаем контур считая сколько пикселей вошло через раз или пунктиром на контуре…это опять же просто вариант Хафа.
ИМХО тут нет альтернатив. Единственно уменьшить размеры растра.
3)Дальше нужен скан поверхности т.к. просто приложить растр целой таблетки никак…
разные условия освещения. Это в конвейерах таблетки загоняют в указанное место и фоткают. Тут не так…отсюда намного сложней матан.
Зная центр таблетки и 3д модель поверхности скана считаем сумму квадратов отклонений целой таблетки от текущей. Еще под вопросом другая сторона таблетки =).

Пристали вы к этим дугам…ничего они вам не дадут.
0
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
11.10.2019, 18:20  [ТС]
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Ну, тогда можно попробовать снизить на порядок скорость обучения - и посмотреть эффект.
Попробую это немного позднее. Спасибо.
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Вот чтобы не было такого - и нужно стараться давить веса по амплитуде (или давить производные в обучающих точках). Естественно, так, чтобы это не начинало негативно влиять на точность обучения (т.е. вес регуляризующего=штрафного компонента - подбирается на практике под задачу). Меньшие по амплитуде веса и/или производные - это ликвидация (либо меньшая амплитуда) тех колебаний решения, которые нейронка добавила от себя.
Удивительное дело, все это я читал в книжках и думал что понимаю и понимал это, но не мог тогда это связать с материалом в работе, т.к. работы тогда еще не было. А сейчас это даже не вспомнил. А вот эти простые слова: "нейронка добавила от себя" сразу открывают суть. Теперь попробую разобраться регуляризацией.

Excalibur921, уже все давно перепробовано и найден лучший вариант, легчайший для процессора. Все давно работает, но со сбоями. То, что вы предлагаете, для процессора неподъёмно. Даже если бы я захотел в корне поменять технологию мне бы это не позволили сделать.

Предлагаю обсудить как я составляю данные для обучения сети:
Проблема с обучением простой нейронной сети методом Левенберга-Марквардта
Проблема с обучением простой нейронной сети методом Левенберга-Марквардта
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.10.2019, 18:20

Проблемы с обучением LSTM нейронной сети
Всем привет! Обращаюсь за помощью к людям, имеющим практический опыт обучения LSTM нейронных сетей. Задача - обучить LSTM сеть переводу с...

Как же обучать автокодировщик? Непонятная ситуация с обучением нейронной сети
Доброго времени суток! Сразу к делу. Пытаюсь использовать метод обратного распространения ошибки при обучении автокодировщика. Обучаю на...

Метод Левенберга - Марквардта
Доброго времени суток. Помогите пожалуйста с реализацией метода Левенберга-Марквардта для нахождения значений некоторой заданной функции.

Алгоритм Левенберга-Марквардта
Доброе время суток! Помогите в реализации алгоритма Левенберга-Марквардта в Матлабе. Есть теоретические выкладки, возникает проблема с...

Применение алгоритма Левенберга-Марквардта
представим, есть матрица, в которой содержится нечто похожее на 2умерную ф-цию гаусса, т.е i - это у, j это х, и значение каждого элемента...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
70
Ответ Создать тему
Новые блоги и статьи
Лето уходит
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. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru