Pare pytan o siec neuronowa backprop - gdzies jest blad

0

czesc

sluchajcie, zrobilem siec neuronowa i mam z nia male problemy.
ciezko mi znalezc blad, bo nie jestem pewien kilku rzeczy:

siec jest wielowarstwowa:
56 wejsc > 3 neurony > 2 neurony > 1 neuron.
na wyjsciu ma byc 0 lub 1 wiec funkcje aktywacji dalem sigmoidalna unipolarna.
generalnie jest tak, ze:
na wyjsciach pierwszej warstwy mam liczby z zakresu 0..1 (czyli chyba tak jak powinno byc).
ale juz na wyjsciach 2 warstwy dostaje liczby z zakresu 0,5...0,73
a na wyjsciu ostatniej warstwy liczby z zakresu 0,67..0,78.
to wszystko jeszcze przed procesem uczenia.
z tego co rozumiem, to na wyjsciu kazdej warstwy powinny byc liczby z zakresu 0..1? :/

najgorsze jest to, ze nie wiem czym to jest spowodowane.
funkcje aktywacji sa takie same dla wszystkich neuronow, wagi poczatkowe tez sa losowane w ten sam sposob...
f(x)=1/(1+exp(-x) );
wagi poczatkowe losowane z zakresu 0,1..1

jestem na 90% pewny, ze wszystko jest dobrze zrobione, wedlug algorytmu z tej strony:
http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html (czytelnie ktrok po kroku, bez miliona nieczytelnych wzorow ;] )
dla pewnosci konsultowalem to jeszcze z wykladowca...

jakies pomysly? :/

0

Lepiej losuj wagi z zakresu -1 do 1. Domyslam się również że wartość progu w twoim wypadku to 0 (tą wartość też losuj z zkresu -1 do 1). Poza tym sieć o 50 wejściach i 3 neuronach w pierwszej warstwie wygląda mi na niezbyt rozsądnie zaplanowaną (ale to zależy oczywiście od tego, czego ta sieć ma się uczyć).

Pozdrawiam.

0
RFabianski napisał(a)

Domyslam się również że wartość progu w twoim wypadku to 0 (tą wartość też losuj z zkresu -1 do 1).

wartosc progu...? tzn chodzi o odchylenie, "b"?
aaa... walsnie.. odchylenie... co z nim robic w trakcie uczenia? traktowac jak inne wagi?

RFabianski napisał(a)

Poza tym sieć o 50 wejściach i 3 neuronach w pierwszej warstwie wygląda mi na niezbyt rozsądnie zaplanowaną (ale to zależy oczywiście od tego, czego ta sieć ma się uczyć).

w "Wece" dzialalo. z reszta to i tak na razie na probe...

0

co z nim robic w trakcie uczenia? traktowac jak inne wagi?

Tak - tę wagę również poprawiaj.

Czym jest u ciebie "56 neuronów" na pierwszej warstwie? .. czy to są neurony czy tylko "rozdzielacze sygnału"...

Wydaje mi się, również, że masz za mało neuronów ukrytych.

0

nie neuronow tylko wejsc... czyli kazdy neuron w pierwszej warstwie (3 neurony) ma tyle wejsc.
taak, wieem, za duzo... ale nie w tym rzecz.

0
cimak napisał(a)

na wyjsciu ma byc 0 lub 1 wiec funkcje aktywacji dalem sigmoidalna unipolarna.
generalnie jest tak, ze:
na wyjsciach pierwszej warstwy mam liczby z zakresu 0..1 (czyli chyba tak jak powinno byc).
ale juz na wyjsciach 2 warstwy dostaje liczby z zakresu 0,5...0,73
a na wyjsciu ostatniej warstwy liczby z zakresu 0,67..0,78.
to wszystko jeszcze przed procesem uczenia.
z tego co rozumiem, to na wyjsciu kazdej warstwy powinny byc liczby z zakresu 0..1? :/
mam glupie pytanie, czy 0.5 albo 0.78 nie znajduja sie w zakresie 0..1 ?

skoro na wyjsciu ma byc 0 lub 1 to chyba chodzi ci o funkcje skokowa unipolarna. no chyba, ze po nauczeniu sieci masz otrzymac dokladnie 0 lub 1 dla jakichs konkretnych przykladow.

0
zajety napisał(a)
cimak napisał(a)

na wyjsciu ma byc 0 lub 1 wiec funkcje aktywacji dalem sigmoidalna unipolarna.
generalnie jest tak, ze:
na wyjsciach pierwszej warstwy mam liczby z zakresu 0..1 (czyli chyba tak jak powinno byc).
ale juz na wyjsciach 2 warstwy dostaje liczby z zakresu 0,5...0,73
a na wyjsciu ostatniej warstwy liczby z zakresu 0,67..0,78.
to wszystko jeszcze przed procesem uczenia.
z tego co rozumiem, to na wyjsciu kazdej warstwy powinny byc liczby z zakresu 0..1? :/
mam glupie pytanie, czy 0.5 albo 0.78 nie znajduja sie w zakresie 0..1 ?

skoro na wyjsciu ma byc 0 lub 1 to chyba chodzi ci o funkcje skokowa unipolarna. no chyba, ze po nauczeniu sieci masz otrzymac dokladnie 0 lub 1 dla jakichs konkretnych przykladow.

Dokładnie to samo chciałem napisać... żeby było ciekawiej funkcja sigmoidalna nigdy nie zwróci Ci wartości 0 lub 1 bo ona dąży do tych wartości nigdy ich nie osiągając (ale to już taka dygresja). Jedyna rzecz, która mnie zastanawia to to, że przy takiej ilości zmiennych wejściowych masz takie wyśrodkowane wyniki (co byłoby normalne przy niewielkiej ilości zmiennych). W związku z powyższym pytanie jest jakiej wartości przyjmują Twoje zmienne wejściowe? rozumiem, że je przeskalowałeś ale w jaki sposób i jakie średnie wartości przyjmują? Jak bliskie zera to wszystko byłoby jasne :) natomiast jak większe to może masz coś skopane z sumowaniem... może spróbuj je zestandaryzować (tj. Xi-Xśr/odchylenie - Xi wartość zmiennej, Xśr - średnia wartość danej zmiennej)
Pozdrawiam

0

dane wejsciowe znormalizowane. teraz sa w zakresie 0..1.
wlasciwie to juz sie z tym uporalem, mialem jakies glupie bledy w programie, nawet nie pamietam jakie.
a no i problemem (jednym z wielu) byl blad "floating point overflow" (jak net bedzie zbyt duze lub zbyt male).
ale rozwiazanie w sumie banalne, znalazlem na jakiejs stronie zagranicznej:

function f(net:Real):Real; //funkcja aktywacji
var a:Real;
begin  
  a:=-1;
  if net<-45 then result:=0 else
  if net>45  then result:=1 else
                        result:=1/(1+exp(a*net) );
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1