Mnożenie wartości double różnych tablic w pętli - nie oczekiwane wyniki

0

Witam Was ponownie,
tym razem zrobiłem lwią część skalowalnej sieci neuronowej z tablicami dwu wymiarowymi.
W metodzie double[]

delty_wag_h() 

chcę mnożyć 3 wartości przyrostu wag neuronów: wsp_korekcji/uczenia * syg_bledu_h[x] * funkc_aktyw_hide[x] ale to się żle mnoży.

        public double[] delty_wag_h(){
            for(int x=0; x<syg_bled_H.length; x++){
                delta_wag_h[x] = wsp_kor * syg_bled_H[x]*(fa_hide_tab[x]);
            }
            return delta_wag_h;
        }

Próbowałem też tak ale wyniki nadal są nie prawidłowe - zawyżone:

        public double[] delty_wag_h(){
            for(int x=0; x<syg_bled_H.length; x++){
                delta_wag_h[x] = wsp_kor;
                tmp[x] = delta_wag_h[x]*fa_hide_tab[x];
                delta_wag_h[x] *= tmp[x];
            }
            return delta_wag_h;
        }

Czekam na jakieś sugestie bo sam nie wiem już co wymyślić.

0

Edit: wkradła mi się "literówka" powinno być w drugiej metodzie:

       public double[] delty_wag_h(){
            for(int x=0; x<syg_bled_H.length; x++){
                delta_wag_h[x] = wsp_kor;
                tmp[x] = syg_bled_H[x] * fa_hide_tab[x];  // tu była zła tablica ale to i tak nie działa poprawnie
                delta_wag_h[x] *= tmp[x];
            }
            return delta_wag_h;
        }
0

Czy w delta_wag_h ma się znajdować ostateczny błąd który zostanie użyty podczas aktualizowania wag neuronów? Czy to jest algorytm backpropagation?

0

Tak ostateczny, który jest już oczywiście częścią prop. wstecznej.

Ale to nie oto chodzi.
Jak policzyłem na kalkulatorze to równanie to mi wyszło ok mnożąc je osobno.
Tu chodzi o sposób mnożenia double na tablicach.

0

Chodzi ci o to że mnożenie double * double daje ci inny wynik niż kiedy te double były by w tablicy(tab[0] * tab[0])?

0

Z grubsza jak weźmiesz 0.1 * (-0.0082)= -0.00082 * 0.7892 = -0.000647144 i taki wynik ma wyjść. Indeksy tablic mi się zgadzają. Zobaczymy jutro dziś jestem już zmęczony.

0

A czy to ma sens?

       double a = 0.0;
       public double delta_wag(){
            a= 0.1 * (-0.0082);
            return a; 
        }

Wyniki:
-8.200000000000001E-4

Co to w ogóle jest? WTF?

1

A moze sprobuj uzyc do tego klasy BigDecimal?

0

Wielkie dzięki kolego :)

0

Moim zdaniem BigDecimal tutaj nie ma sensu używać, lepiej znajdź przyczynę dlaczego podstawowe działanie daje ci zły wynik. Ja bym zaczął od ponownej instalacji jdk.

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