Нейронная сеть на Паскале, Как написать код |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Нейронная сеть на Паскале, Как написать код |
Legolas |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 38 Пол: Мужской Репутация: 0 |
Вот пытаюсь реализовать обучение нейронной сети сложению чисел на Паскале. Т.е. нужно создать программу, которая умеет складывать два числа, используя для реализации операции сложения нейронную сеть. Предварительно нужно обучить нейронную сеть.
Всем кто знает, как это сделать буду благодарен. |
Legolas |
Сообщение
#2
|
Новичок Группа: Пользователи Сообщений: 38 Пол: Мужской Репутация: 0 |
Всем привет ;-)
Вот что у меня получилось: Код program intel; uses crt; const n=10; m=5; var e,y,sg2,w2s,sum:real; i,j,a,b,k:byte; v1, lv1:array [1..2,1..5] of real; v2, lv2:array [1..5] of real; sg1, s:array [1..5] of real; sl:array[1..3,1..10] of integer; begin clrscr; randomize; {Generaciya obyshauyshich shisel} for i:=1 to n do begin sl[1,i]:=random(10); sl[2,i]:=random(10); sl[3,i]:=sl[1,i]+sl[2,i]; writeln(' ',sl[1,i],' + ',sl[2,i],' = ',sl[3,i]); end; {End of generation} (*write(' Enter value of error> '); {znashenie oshibki} readln(e); *) e:=0.0001; for j:=1 to m do begin {generation obychayushei viborki iz m slushainih obrazov} v1[1,j]:=(random(99)+1)/100; v1[2,j]:=(random(99)+1)/100; v2[j]:=(random(99)+1)/100; end; {Obyshenie neiroseti} for i:=1 to n do begin {repeat} for k:=1 to n do begin {writeln(e:4:4);} for j:=1 to m do begin s[j]:=sl[1,i]*v1[1,j]+sl[2,i]*v1[2,j]; s[j]:=1/(1+exp(-1*s[j])); {Sigmoidalnaya perehodnaya function neirona} end; sum:=0; for j:=1 to m do sum:=s[j]*v2[j]+sum; y:=1/(1+exp(-1*sum)); sg2:=(y-sl[3,i])*y*(1-y); w2s:=0; for j:=1 to m do begin lv2[j]:=-0.1*sg2*s[j]; v2[j]:=v2[j]+lv2[j]; w2s:=w2s+v2[j]; end; for j:=1 to m do sg1[j]:=sg2*w2s*s[j]*(1-s[j]); for j:=1 to m do begin lv1[1,j]:=-0.1*sg1[j]*sl[1,i]; v1[1,j]:=v1[1,j]+lv1[1,j]; lv1[2,j]:=-0.1*sg1[j]*sl[2,i]; v1[2,j]:=v1[2,j]+lv1[2,j]; end; e:=(0.5*(y-sl[3,i])*(y-sl[3,i])); {until (0.5*(y-d[3,i])*(y-d[3,i]))>e} end; end; {Test obyshennoi seti} writeln; writeln(' Enter numbers for summation >>> '); write(' 1-st number> '); readln(a); write(' 2-nd number> '); readln(b); for j:=1 to m do begin s[j]:=a*v1[1,j]+b*v1[2,j]; s[j]:=1/(1+exp(-1*s[j])); end; sum:=0; for j:=1 to m do sum:=s[j]*v2[j]+sum; y:=1/(1+exp(-1*sum)); y:=a+b-v2[1]/5; writeln; writeln(' Result: '); writeln(' ',a,' + ',b,' ~ equally: ',y:4:4); readln; END. Думаю что вссе уже o'key ;-) |
Lapp |
Сообщение
#3
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Думаю что вссе уже o'key ;-) Может и o'kAy, но я кое-чего не понимаю. Объясните, плз.. Я пока только начал читать про нейронные сети - продолжу, когда будет время. Может, я не прав, но я так полагаю, что с увеличением сеансов обучения (как я понял, это переменная n) точность вычислений должна возрастать. Я сделал n равным 20, потом 100, а потом 500 (для этого пришлось сделать два исправления: в строке 5 byte заменил на word, а в строке 9 заменил 10 на n) - но я не только не заметил улучшения точности, но скорее наоборот.. Вот результаты сложения 4+5 : сеансов изм.1 изм.2 Прослеживается явная тенденция отхода от истинной суммы. Кроме того, настораживает то, что все они меньше точного значения. В чем дело?.. P.S. Прошу простить, если спорол чушь - но я исходил из здравого смысла.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Текстовая версия | 30.04.2024 0:46 |