Wytłumaczcie mi jak metoda sie wykonuje wywołując inne metody

0

Cześć, skończyłem prototyp sieci neuronowej.
I tak wywołuję:

public void iloscPrzebiegowSieci(int licznik){
            for(int i=0;i<licznik;i++){
                netA();
                netB();
                fanetA();
                fanetB();
                netZ();
                fanetZ();
                tablicaWynikow(x1,x2,x3,propagacjaWsteczna()); // propagacjaWsteczna() zwraca tablicę 
                System.out.println("licznik"+i);                                    
                                                                                    
            }

ale to nie ważne tylko co pokazuje konsola:

licznik0
licznik1
licznik2
licznik3
licznik4
licznik5
licznik6
licznik7
licznik8
licznik9
Wartość oczekiwana:  0.8
Współczynnik korekcji:  0.01
Tablica zwrócona po 10 przebiegu
[0.49987719394694813, 0.6998899098322473, 0.5999508775787792, 0.8999559639328991, 0.7999754387893898, 0.7999779819664494, 0.5999140357628637, 0.39992293688257313, 0.4991798570639368, 0.8999030856177592, 0.8999099944635253]
1.319813205306318  sygnał A
1.4998325469089389  sygnał B   <- sygnały z warstwy wejściowej do neuronów A i B
0.7891506270371467
0.8175494997932883  sygnały z funkcji aktywacji dla neuronu Z
1.9451568959219179  funkcja aktywacji neuronu Zet
0.8749175896280418  wynik działania sieci po 10 przebiegu

Dlatego się zastanawiam jak to mniej więcej się odbywa. Chodzi o te liczniki dlaczego one się najpierw wypisują?
Jakieś podpowiedzi?

P.S. Tak wyglądają wyniki po milionie przebiegów:

Wartość oczekiwana:  0.8
Współczynnik korekcji:  0.01
Tablica zwrócona po 1000000 przebiegu
[0.4327005536092148, 0.6395596909601108, 0.5730802214437907, 0.8758238763841083, 0.7865401107219445, 0.7879119381921119, 0.552890387526557, 0.35769178367204363, 0.051583132520329804, 0.8475391331178729, 0.8510558742234517]
1.2062639355997098  sygnał A
1.3978558777226069  sygnał B   <- sygnały z warstwy wejściowej do neuronów A i B
0.7696372279891445
0.8018434282369424  sygnały z funkcji aktywacji dla neuronu Z
1.3862943613540124  funkcja aktywacji neuronu Zet
0.8000000000000022  wynik działania sieci po 1000000 przebiegu

te 0022 na końcu to przeuczenie

0

WTF? Przecież to jest twój kod! Wypisuje się to co w nim wypisujesz...

0

Wiem co robię z kodem i w kodzie ale dlaczego najpiewr wypisuje liczniki a póżniej wywołuje metody?
Czy java zapisuje wyniki do zmiennych dopiero po wykonaniu ostatniej metody przez co podaje je na końcu?

0

Nie. Ja myślę że ty po prostu za tą pętlą którą nam pokazałeś robisz wypisywanie wyniku... Albo ewentualnie robisz to wielowątkowo.

0

zamieść chociaż jedną z metod poprzedzających sysouta i może klasę w której wywołujesz iloscPrzebiegowSieci(), bo w tym momencie to nic nie można więcej wywnioskować z tego kodu oprócz tego co zostało już powiedziane.

0

Dzięki panowie za chęć pomocy ale już zrozumiałem w czym problem, którego nie ma.
Chciałem sprawdzić czy wyniki nie wypisują mi się w przypadkowym momencie działania sieci ale nie są.
Po prostu wyniki sa zwracane dopiero i tylko wtedy gdy program skończy działanie i wszystkie wartości końcowe zmiennych rozsyłane do tych zmiennych.

public static void main(String[] args) {
       //                     x1,x2,x3,   w0a,w0b,w1a,w1b,w2a,w2b,w3a,w3b,w0z,waz,wbz
       Neuron A = new Neuron(0.4,0.2,0.7, 0.5,0.7,0.6,0.9,0.8,0.8,0.6,0.4,0.5,0.9,0.9); // wartości początkowe
       
       int licznikPrzebiegów = 1000000;
       A.n = 0.01;
       A.iloscPrzebiegowSieci(licznikPrzebiegów);
       
       
       System.out.println("Wartość oczekiwana:  "+A.oczekiwZ);
       System.out.println("Współczynnik korekcji:  "+A.n);
       System.out.println("Tablica zwrócona po "+ licznikPrzebiegów +" przebiegu\n"+Arrays.toString(A.tabWagNeur));
       System.out.print(A.netA+"  sygnał A\n"+A.netB+"  sygnał B   <- sygnały z warstwy wejściowej do neuronów A i B\n");  // 
       System.out.print(A.faA+"\n"+A.faB+"  sygnały z funkcji aktywacji dla neuronu Z\n");
       System.out.print(A.netZ+"  funkcja aktywacji neuronu Zet\n");
       System.out.print(A.faZ+"  wynik działania sieci po "+ licznikPrzebiegów +" przebiegu\n");
       
//       0.8750186379487415
       
    }

Wcześniej myślałem że wartości są "ustawiane" także w trakcie działania sieci pomiędzy przebiegami propWstecznej.
konkretnie chodziło mi o to czy Arrays.toString(A.tabWagNeur) nie wyświetli mi się gdzieś w połowie gdyż jest ona (tablica) zwracana w propWstecznej() i zamieniana na
tabwagNeur [] jako tylko do odczytu w tablicaWyników(), która z kolei zwraca oryginalną tablicę nowych wag neuronów z poprzedniej propagacji wstecznej ... - ale to juz inna historia.

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