<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=48&amp;t=5879&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-03-27T15:37:57+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=48&amp;t=5879&amp;mode</id>
<entry>
<author><name><![CDATA[ZgłebiaczTajników]]></name></author>
<updated>2014-03-27T15:37:57+01:00</updated>
<published>2014-03-27T15:37:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5879&amp;p=76039#p76039</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5879&amp;p=76039#p76039"/>
<title type="html"><![CDATA[Re: Tłumaczenie kodu z C na JAVĘ]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5879&amp;p=76039#p76039"><![CDATA[
Ja napisałem taki program sieci. Właściwie to jest tylko moja własna próba zaimplementowania algorytmu sieci.<br />Najprościej jak umiałem:<br />(Trochę się wstydzę pokazywać bo to niezoptymalizowane i wogóle masakra <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> tylko tak na szybko sam algo)<br />[syntax=java]public class SSN {<br /><br />    public static class Neuron{<br />        double E = 2.718281828; // liczba Napera<br />        double&#91;&#93;&#91;&#93; Lin;         // input layer<br />        double&#91;&#93;&#91;&#93; mnozenieWej;     // Hide Layer - wartoĹ›ci mnoĹĽenia(syg*wagi) funkcji Net(X) neuronĂłw ukrytych        <br />        double&#91;&#93;&#91;&#93; net_hide;     // tablica wartoĹ›ci dodanych w Hide Layer czyli wyniki funkcji Net(X);<br />        double&#91;&#93;&#91;&#93; mnozenie_warstwy_wyj_tab;  // wartoĹ›ci mnoĹĽenia syg*wagi w warstwie wyjĹ›ciowej<br />        double&#91;&#93;&#91;&#93; neur_z;         // warstwa wyjĹ›ciowa<br />        double&#91;&#93;   net_out;   // wartoĹ›ci dodane<br />        double&#91;&#93;   fa_hide_tab;      <br />        double&#91;&#93;   fa_out_tab;     // funkcja aktywacji neuronĂłw Z<br />        int ilNhide;<br />        int ilWynikow;<br />        double&#91;&#93;&#91;&#93; tab_popr_wag_neuronow;<br />        double&#91;&#93; syg_bled_Z = new double&#91;1&#93;;<br />        double&#91;&#93; syg_bled_H = new double&#91;2&#93;;<br />        double&#91;&#93; delty_h_double = new double&#91;3&#93;;<br />        <br />        <br />        <br />        <br />        BigDecimal&#91;&#93; delta_wag_h = new BigDecimal&#91;2&#93;;<br />        double oczekiw = 0.1234567890;<br />        double wsp_kor = 0.01;<br />        double&#91;&#93; tmp = new double&#91;3&#93;;<br />        BigDecimal&#91;&#93; delty_z = new BigDecimal&#91;3&#93;;<br />        BigDecimal&#91;&#93; delty_wag_a = new BigDecimal&#91;4&#93;;<br />        BigDecimal&#91;&#93; delty_wag_b = new BigDecimal&#91;4&#93;;<br />        BigDecimal&#91;&#93;&#91;&#93; nowe_wagi_neur = new BigDecimal&#91;2&#93;&#91;4&#93;;<br />        BigDecimal&#91;&#93;&#91;&#93; delty_neuronow_ab = new BigDecimal&#91;2&#93;&#91;4&#93;;<br />        <br />        <br />        <br />        <br />        // Konstruktor obiektu i deklaracje zmiennych<br />        Neuron(double&#91;&#93;&#91;&#93; In_Layer, double&#91;&#93;&#91;&#93; Out_Layer, int ilNeuronow_Hide, int ilNeuronow_In){<br />            this.Lin                      = In_Layer;                               // warstwa wejĹ›ciowa - input Layer <br />            this.neur_z                   = Out_Layer;                             // warstwa wyjsciowa - Z Layer<br />            this.ilWynikow                = In_Layer&#91;0&#93;.length * ilNeuronow_Hide;     // iloĹ›Ä‡ poĹ‚Ä…czeĹ„ miÄ™dzy neuronami<br />            this.ilNhide                  = ilNeuronow_Hide;                       // iloĹ›Ä‡ neuronĂłw ukrytych, inaczej rozmiar tablicy rĂłwny Lin.length-1;<br />            this.mnozenieWej              = new double &#91;ilNeuronow_Hide&#93;&#91;ilNeuronow_In&#93;;   // tablica pomnoĹĽonych wartoĹ›ci syg i wag w Hide Layer<br />            this.net_hide                 = new double &#91;ilNeuronow_Hide&#93;&#91;1&#93;;          // iloĹ›Ä‡ neuronĂłw ukrytych<br />            this.fa_hide_tab              = new double &#91;ilNeuronow_Hide&#93;;             // funkcje aktywacji<br />            this.mnozenie_warstwy_wyj_tab = new double &#91;Out_Layer.length&#93;&#91;Out_Layer&#91;0&#93;.length&#93;;<br />            this.net_out                  = new double &#91;Out_Layer.length&#93;;<br />            this.fa_out_tab               = new double &#91;Out_Layer.length&#93;;<br />            this.tab_popr_wag_neuronow    = new double&#91;ilNeuronow_Hide&#93;&#91;ilNeuronow_In&#93;;<br />            this.delta_wag_h              = new BigDecimal&#91;2&#93;;<br />        }<br />//      Najpierw mnoĹĽymy sygnaĹ‚y i wagi a pĂłĹĽniej odawanie do siebie wynikĂłw mnoĹĽenia<br />        public double&#91;&#93;&#91;&#93; net_warstwa_ukr(){<br />            for(int x=0; x&lt;Lin.length; x++){<br />                for(int y=0; y&lt;Lin&#91;x&#93;.length; y++){<br />                    if(x!=Lin.length-1)<br />                       mnozenieWej&#91;x&#93;&#91;y&#93;=Lin&#91;0&#93;&#91;y&#93;*Lin&#91;x+1&#93;&#91;y&#93;;  <br />                }<br />            }<br />            // dodajemy te wartoĹ›ci tablicy do siebie<br />            for(int i=0;i&lt;mnozenieWej.length;i++){<br />                for(int x=0;x&lt;mnozenieWej&#91;i&#93;.length;x++){<br />                    net_hide&#91;i&#93;&#91;0&#93;+=mnozenieWej&#91;i&#93;&#91;x&#93;;}<br />            }return net_hide;<br />        }<br />        <br />        public double&#91;&#93; funkcja_aktywacji_ukr(){<br />            for(int i =0; i&lt;net_hide.length; i++){<br />                for(int x=0; x&lt;net_hide&#91;i&#93;.length; x++){<br />                    fa_hide_tab&#91;i&#93; = 1/ (1 + Math.pow( E, -net_hide&#91;i&#93;&#91;x&#93;));<br />                }<br />            }return fa_hide_tab;<br />        }<br /><br />        <br />//      wyliczanie - mnoĹĽenie wartoĹ›ci syg * wagi neuronĂłw Z oraz dodawanie pomnoĹĽonych wartoĹ›ci do siebie <br />        public double&#91;&#93; net_wyj(){<br />            for(int x=0; x&lt;neur_z.length; x++){<br />                mnozenie_warstwy_wyj_tab&#91;x&#93;&#91;0&#93;= Lin&#91;0&#93;&#91;0&#93;*neur_z&#91;x&#93;&#91;0&#93;;<br />            } <br />            for(int x=0; x&lt;neur_z.length; x++){<br />                    for(int a=0; a&lt;fa_hide_tab.length; a++){<br />                        mnozenie_warstwy_wyj_tab&#91;x&#93;&#91;a+1&#93;= neur_z&#91;x&#93;&#91;a+1&#93; * fa_hide_tab&#91;a&#93;; <br />                    }<br />            }<br />            net_out&#91;0&#93;=0;<br />            for(int x=0; x&lt;mnozenie_warstwy_wyj_tab.length; x++){<br />                for(int y=0; y&lt;mnozenie_warstwy_wyj_tab&#91;x&#93;.length; y++){<br />                    net_out&#91;x&#93; += mnozenie_warstwy_wyj_tab&#91;x&#93;&#91;y&#93;;<br />                }<br />            }<br />            return net_out;<br />        }<br />        <br />        <br />        <br />        public double&#91;&#93; funkcja_aktywacji_Z(){<br />            for(int x=0; x&lt;net_out.length; x++){<br />                fa_out_tab&#91;x&#93; = 1 /(1 + Math.pow(E, -net_out&#91;x&#93;));<br />            }<br />            return fa_out_tab;<br />        }<br />        <br />        <br />        public double&#91;&#93; syg_bledow_Z(){<br />            for(int x=0; x&lt;fa_out_tab.length; x++){<br />                syg_bled_Z&#91;x&#93; = fa_out_tab&#91;x&#93;*(1-fa_out_tab&#91;x&#93;)*(oczekiw-fa_out_tab&#91;x&#93;);<br />            }<br />            return syg_bled_Z;<br />        }<br />        <br />        <br />        public double&#91;&#93; syg_bledow_H(){<br />            for(int x=0; x&lt;fa_hide_tab.length; x++){<br />                for(int y=0; y&lt;syg_bled_Z.length; y++)<br />                    syg_bled_H&#91;x&#93; = fa_hide_tab&#91;x&#93;*(1-fa_hide_tab&#91;x&#93;)*(syg_bled_Z&#91;y&#93;);<br />            }<br />            return syg_bled_H;<br />        }<br />        <br />        <br />        <br />        public BigDecimal&#91;&#93; delty_wag_a(){<br />            for(int x = 0; x&lt;delty_wag_b.length; x++) {<br />      for(int y = 1; y&lt;syg_bled_H.length; y++)   <br />                delty_wag_a&#91;x&#93;= new BigDecimal(wsp_kor*syg_bled_H&#91;y&#93;*Lin&#91;0&#93;&#91;x&#93;, MathContext.DECIMAL64);<br />            }<br />            return delty_wag_a;<br />        }<br />        <br />        <br />        <br />        <br />        public BigDecimal&#91;&#93; delty_z(){   <br />            delty_z&#91;0&#93; = new BigDecimal(wsp_kor * syg_bled_Z&#91;0&#93; * Lin&#91;0&#93;&#91;0&#93;, MathContext.DECIMAL64);<br />            delty_h_double&#91;0&#93; = (delty_z&#91;0&#93;).doubleValue();<br />            for(int x=1; x&lt;fa_hide_tab.length+1; x++)<br />            {<br />                delty_z&#91;x&#93; = new BigDecimal(wsp_kor * syg_bled_Z&#91;0&#93;*fa_hide_tab&#91;x-1&#93;, MathContext.DECIMAL64); <br />                delty_h_double&#91;x&#93; = (delty_z&#91;x&#93;).doubleValue();<br />            }<br />            return delty_z;<br />        }<br />        <br />        <br />        <br />        public BigDecimal&#91;&#93; delty_b(){   <br />         for(int x = 0; x&lt;delty_wag_b.length; x++) {<br />      for(int y = 0; y&lt;syg_bled_H.length-1; y++)         <br />                  delty_wag_b&#91;x&#93;= new BigDecimal(wsp_kor*syg_bled_H&#91;y&#93; * Lin&#91;0&#93;&#91;x&#93;, MathContext.DECIMAL64);<br />    }<br />            return delty_wag_b;<br />        }<br /><br />        <br />        <br />        public BigDecimal&#91;&#93;&#91;&#93; concat_tab(){<br />            for(int x = 0; x &lt; nowe_wagi_neur.length; x++){<br />                delty_neuronow_ab&#91;x&#93; = (x == 0 ? delty_wag_a : delty_wag_b);<br />            }<br />            return delty_neuronow_ab;<br />        }<br />        <br />        <br />        <br />        public double&#91;&#93;&#91;&#93; nowe_wagi_neuronow_ab(){  <br />            BigDecimal&#91;&#93;&#91;&#93; Lin_BD = new BigDecimal&#91;3&#93;&#91;4&#93;;<br />            for(int x = 0; x&lt;nowe_wagi_neur.length; x++) {<br />      for(int y = 0; y&lt;nowe_wagi_neur&#91;x&#93;.length; y++){ <br />                   Lin_BD&#91;x&#93;&#91;y&#93; = new BigDecimal(Lin&#91;x+1&#93;&#91;y&#93; ,MathContext.DECIMAL64);<br />                   nowe_wagi_neur&#91;x&#93;&#91;y&#93; = (delty_neuronow_ab&#91;x&#93;&#91;y&#93;).add(Lin_BD&#91;x&#93;&#91;y&#93;);<br />                   Lin&#91;x+1&#93;&#91;y&#93; = nowe_wagi_neur&#91;x&#93;&#91;y&#93;.doubleValue();<br />              }<br />            }<br />            return Lin;<br />        }<br />        <br />        public double&#91;&#93;&#91;&#93; nowe_wagi_neuronow_z(){<br />            BigDecimal&#91;&#93;&#91;&#93; neur_z_BD = new BigDecimal&#91;1&#93;&#91;3&#93;;<br />            for(int x = 0; x&lt;neur_z.length; x++){<br />                for(int y = 0; y&lt;neur_z&#91;x&#93;.length; y++){<br />                    neur_z&#91;x&#93;&#91;y&#93; += (delty_z&#91;y&#93;).doubleValue();<br />                }<br />            }<br />            return neur_z;<br />        }<br />        <br />  <br />        <br />        public void przebiegi_sieci(int licznik){<br />            for(int i =0; i&lt;licznik; i++){<br />                net_warstwa_ukr();<br />                funkcja_aktywacji_ukr();<br />                net_wyj();<br />                funkcja_aktywacji_Z();<br />                syg_bledow_Z();<br />                syg_bledow_H();<br />                 // Nie ma obliczania sygnaĹ‚Ăłw bĹ‚Ä™dĂłw dla warstwy In bo sie nie oblicza<br />                delty_z();<br />                delty_wag_a();<br />                delty_b();<br />                concat_tab();<br />                nowe_wagi_neuronow_z();<br />                nowe_wagi_neuronow_ab();<br />            }<br />        }<br />    }<br />// To już jest totalna masakra ale nie chciało mi się nad tym mysleć bo to tylko testy.<br />public static void main(String&#91;&#93; args) {<br />//                                   x0  x1  x2  x3<br />        double&#91;&#93;&#91;&#93; NeuronyWej_wagi ={{1.0,0.4,0.2,0.7}    // sygnaĹ‚y Lin<br />    //                               w0a w1a w2a w3a<br />                                   ,{0.5,0.6,0.8,0.6}    // kaĹĽda wartoĹ›Ä‡ to waga neuronu wejsciowego z neuronem A<br />                                   ,{0.7,0.9,0.8,0.4}};  // &#91;...&#93; z neuronem B<br />//                                     w0z wAz wBz <br />        double&#91;&#93;&#91;&#93;  NeuronyWyj_wagi ={{0.5,0.9,0.9}};  // wagi neuronu(Ăłw) Z<br />        int IL_NHIDE = NeuronyWej_wagi.length-1;       // liczba neuronĂłw w warstwie ukrytej<br />        int IL_NIN = NeuronyWej_wagi&#91;0&#93;.length;        // liczba neuronĂłw w warstwie wejĹ›ciowej <br />        <br />        int liczba_epok = 60000; // ponieważ dobrany jest mały współczynnik uczenia 0.01<br /><br />  //****************************************************************************************//      <br />        //Wypisz w = new Wypisz();    // wypisuje tablice z wynikami<br />        <br />        Neuron N = new Neuron(NeuronyWej_wagi, NeuronyWyj_wagi, IL_NHIDE, IL_NIN);<br />        N.przebiegi_sieci(liczba_epok);<br />        <br /><br />   //***************************************************************************************//   <br />        //System.out.println(&quot;Wagi wejĹ›ciowe:&quot;);<br />        System.out.println(&quot;SygnaĹ‚y\n&quot;<br />                + &quot;x0, x1, x2, x3\n&quot;<br />                + &quot;1.0,0.4,0.2,0.7\n&quot;<br />                + &quot;Wagi\n&quot;<br />                + &quot;w0A w1A w2A w3A\n&quot;<br />                + &quot;0.5,0.6,0.8,0.6\n&quot;<br />                + &quot;w0B w1B w2B w3B\n&quot;<br />                + &quot;0.7,0.9,0.8,0.4&quot;);  <br />                             <br />        System.out.println(&quot;Wynik pomnoĹĽonych wartoĹ›ci wag i sygnaĹ‚Ăłw neuronĂłw wejĹ›ciowych:&quot;);<br />        w.wypisz(N.mnozenieWej);<br />        System.out.println(&quot;Wynik funkcji liniowej Net(A) i Net(B) dla neuronĂłw A i B&quot;);<br />        w.wypisz(N.net_hide);<br />        System.out.println(&quot;Funkcja aktywacji neuronĂłw A i B&quot;);<br />        w.wypisz(N.fa_hide_tab);<br />        //System.out.println(&quot;Wynik pomnoĹĽonych wartoĹ›ci wag i sygnaĹ‚Ăłw neuronĂłw ukrytych A i B:&quot;);<br />        //w.wypisz(N.mnozenie_warstwy_wyj_tab);<br />        System.out.println(&quot;Wynik funkcji liniowej Net(Z)&quot;);<br />        w.wypisz(N.net_out);  <br />        System.out.println(&quot;WartoĹ›Ä‡ oczekiwana neuronu Z to: &quot;+N.oczekiw);<br />        System.out.println(&quot;Wynik dziaĹ‚ania sieci - funkcja aktywacji neuronu Z po &quot;+liczba_epok+&quot; epokach&quot;);<br />        w.wypisz(N.fa_out_tab); <br />        System.out.println(&quot;\n\nSygnaĹ‚y bĹ‚Ä™dĂłw Z: &quot;);<br />        w.wypisz(N.syg_bled_Z);<br />        System.out.println(&quot;SygnaĹ‚y bĹ‚Ä™dĂłw H: &quot;);<br />        w.wypisz(N.syg_bled_H);<br />        <br />        System.out.println(&quot;Delty wag warstwy ukrytej : &quot;);<br />        w.wypisz(N.delty_z);<br />        System.out.println(&quot;Delty wszystkich wag : &quot;);<br />        System.out.println(Arrays.toString(N.delty_z)+&quot; &lt;- w0z, waz, wbz&quot;); <br />        System.out.println(Arrays.toString(N.delty_wag_a)+&quot; &lt;- Delty wag in dla neuronu A&quot;);<br />        System.out.println(Arrays.toString(N.delty_wag_b)+&quot; &lt;- Delty wag in dla neuronu B&quot;);<br />        System.out.println(&quot;Uaktualnione wagi neuronĂłw wejĹ›ciowych w ostatniej epoce dziaĹ‚ania sieci&quot;);<br />        w.wypisz(N.Lin);<br /><br />    }<br />import java.math.BigDecimal;<br /><br />/**<br /> *<br /> * @author admin<br /> */<br />public class Wypisz {<br />        public void wypisz(double&#91;&#93;&#91;&#93; tab){<br />            for(int i=0;i&lt;tab.length;i++){<br />                System.out.print(&quot;&#91;&quot;);<br />                for(int x=0;x&lt;tab&#91;i&#93;.length;x++){ <br />                    System.out.print(tab&#91;i&#93;&#91;x&#93;);<br />                    System.out.print(&quot;, &quot;);}<br />                System.out.print(&quot;&#93; \n&quot;);<br />            }<br />        }<br />        public void wypisz(double&#91;&#93; tab){<br />            <br />            for(int i =0;i&lt;tab.length; i++)<br />                System.out.println(tab&#91;i&#93;);<br />        }<br />        public void wypisz(BigDecimal&#91;&#93; tab){<br />            for(int i =0;i&lt;tab.length; i++)<br />                System.out.println(tab&#91;i&#93;);<br />        }<br />        public void wypisz(BigDecimal&#91;&#93;&#91;&#93; tab){<br />            for(int i=0;i&lt;tab.length;i++){<br />                System.out.print(&quot;&#91;&quot;);<br />                for(int x=0;x&lt;tab&#91;i&#93;.length;x++){ <br />                    System.out.print(tab&#91;i&#93;&#91;x&#93;);<br />                    System.out.print(&quot;, &quot;);}<br />                System.out.print(&quot;&#93; \n&quot;);<br />            }<br />        }<br />}<br /><br />}[/syntax]<br />Mieszają się nazwy ang. i polskie ale nie wiedziałem jak to wszystko ponazywać.<br />Dawno nie uruchamiałem i w ogóle mało to obiektowe ale jak mówiłem to tylko test - powinno działać. Nie wiem jak się po polsku nazywa twoja metoda ale pewnie ją tu znajdziesz tyle że bez biasów.<br /><br />P.S ale ze mnie archeolog <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1483">ZgłebiaczTajników</a> — 27 mar 2014, o 15:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[piotr_1547]]></name></author>
<updated>2014-02-08T18:06:30+01:00</updated>
<published>2014-02-08T18:06:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5879&amp;p=69300#p69300</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5879&amp;p=69300#p69300"/>
<title type="html"><![CDATA[Re: Tłumaczenie kodu z C na JAVĘ]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5879&amp;p=69300#p69300"><![CDATA[
Ale gdy są w Javie, jako argumenty funkcji, przekazywane obiekty (w tym tablice, które są też obiektami) - zmiany dokonane na tych obiektach w funkcji mają charakter globalny, bo przekazywane są do tych funkcji kopie referencji do obiektów.<br /><br /><br />Dlatego w kodzie w miejscach, gdzie były [w C] do funkcji przekazywane wskaźniki do określonych zmiennych, zastosowałem w miejsce tych zmiennych tablice jednoelementowe, aby zmiany dokonane na tych tablicach w metodach , były widoczne w innych częściach programu, np.: [syntax=java]long maxIndex&#91;&#93;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2740">piotr_1547</a> — 8 lut 2014, o 18:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[KmPeR]]></name></author>
<updated>2014-02-08T14:55:07+01:00</updated>
<published>2014-02-08T14:55:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5879&amp;p=69265#p69265</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5879&amp;p=69265#p69265"/>
<title type="html"><![CDATA[Re: Tłumaczenie kodu z C na JAVĘ]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5879&amp;p=69265#p69265"><![CDATA[
Może nie przekazuj tych tablic jako argumenty, tylko umieść je w klasie, i operuj na klasach?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 6 minutach ]</span></strong><br /><br />Z tego co się orientuję to podczas przekazywania argumentu, interpreter tworzy kopie zmiennych, więc nie operujesz na faktycznych tablicach tylko kopiach.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1845">KmPeR</a> — 8 lut 2014, o 14:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[piotr_1547]]></name></author>
<updated>2014-02-08T00:44:11+01:00</updated>
<published>2014-02-08T00:44:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5879&amp;p=69168#p69168</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5879&amp;p=69168#p69168"/>
<title type="html"><![CDATA[Tłumaczenie kodu z C na JAVĘ]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5879&amp;p=69168#p69168"><![CDATA[
Witam.<br /><br />Znalazłem pewien program SSN w języku C i chciałbym go przełożyć na język JAVA. Mam jednak problem z pewną funkcją. Przepisany program zwraca nieprawidłowe, w stosunku do tego samego programu w C, wyniki, czemu winna jest (prawdopodobnie) wspomniana funkcja operująca na tablicach. Przed wywołaniem tej funkcji, stan określonych zmiennych w programie w C i JAVIE jest ten sam. Po wywołaniu, stan tablic na których wykonywano operacje oraz końcowy wynik różnią się, a nie powinny, bo to są identyczne programy.<br /><br />Tak wygląda funkcja w języku C:<br /><br />[syntax=c]void ComputeFeedForwardSignals(double* MAT_INOUT,double* V_IN,double* V_OUT, double* V_BIAS,int size1,int size2,int layer)<br />{<br />  int row,col;     <br />  for(row=0;row &lt; size2; row++) <br />    {<br />      V_OUT&#91;row&#93;=0.0;<br />      for(col=0;col&lt;size1;col++) V_OUT&#91;row&#93;+=(*(MAT_INOUT+(row*size1)+col)*V_IN&#91;col&#93;);<br /><br />      V_OUT&#91;row&#93;+=V_BIAS&#91;row&#93;;<br />      if(layer==0) V_OUT&#91;row&#93; = tanh(V_OUT&#91;row&#93;);<br />   }<br />}[/syntax]<br /><br />Natomiast tak wygląda ta sama funkcja przepisana na JAVĘ:<br /><br />[syntax=java]private void  ComputeFeedForwardSignals (double&#91;&#93;&#91;&#93; MAT_INOUT, double&#91;&#93; V_IN, double&#91;&#93; V_OUT, double&#91;&#93; V_BIAS, int size1, int size2, int layer) {<br />         int row, col;<br />         for(row=0;row &lt; size2; row++) <br />           {<br />             V_OUT&#91;row&#93;=0.0;<br />             for(col=0; col&lt;size1; col++) V_OUT&#91;row&#93; =+ MAT_INOUT&#91;row&#93;&#91;col&#93; * V_IN&#91;col&#93;;<br />             <br />             V_OUT&#91;row&#93;+=V_BIAS&#91;row&#93;;<br />             <br />             if(layer==0) V_OUT&#91;row&#93; = Math.tanh(V_OUT&#91;row&#93;);<br />          }<br />  }[/syntax]<br /><br /><br />Funkcja (metoda) jest wywoływana tak:<br /><br />[w C]<br /><br />[syntax=c]void RunNeuralNet_Classification () <br />{<br />  ComputeFeedForwardSignals((double*)input_hidden_weights,input,hidden,hidden_bias,320, 100,0);<br />  ComputeFeedForwardSignals((double*)hidden_output_wts,hidden,output,output_bias,100, 23,1);<br />}[/syntax]<br /><br />[w JAVIE]<br /><br />[syntax=java]private void RunNeuralNet_Classification() <br />        ComputeFeedForwardSignals(Input_hidden_weights, Input, Hidden, Hidden_bias, 320, 100, 0);<br />       ComputeFeedForwardSignals(Hidden_output_wts, Hidden, Output, Output_bias, 100, 23, 1);    <br />  }[/syntax]<br /><br />Argumentami są stałe oraz tablice: 2 dwuwymiarowe i 3 jednowymiarowe:<br />*definicja tablic w C:<br /><br />[syntax=c]double input_hidden_weights&#91;100&#93;&#91;320&#93;={....}; //tablice z {....} są odpowiednio wypełnione<br />double hidden_output_wts&#91;23&#93;&#91;100&#93;={....};<br />double output_bias&#91;23&#93;={....};<br />double hidden&#91;100&#93;;<br />double output&#91;23&#93;;[/syntax]<br /><br />*te same tablice w JAVIE:<br />[syntax=java]private double&#91;&#93;&#91;&#93; Input_hidden_weights = new double&#91;100&#93;&#91;320&#93;; <br />private double&#91;&#93;&#91;&#93; Hidden_output_wts = new double&#91;23&#93;&#91;100&#93;;<br />private double&#91;&#93; Output_bias = new double&#91;23&#93;;<br />private double&#91;&#93; Hidden = new double&#91;100&#93;;<br />private double&#91;&#93; Output = new double&#91;23&#93;;[/syntax]<br /><br /><br />Myślę, że problem jest z fragmentem: <br />[syntax=c]V_OUT&#91;row&#93;+=(*(MAT_INOUT+(row*size1)+col)*V_IN&#91;col&#93;);[/syntax] , który został nieprawidłowo przetłumaczony na JAVĘ. <br /><br />Czy funkcja w C została dobrze przetłumaczona na metodę w JAVIE? Gdzie znajdują się błędy?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2740">piotr_1547</a> — 8 lut 2014, o 00:44</p><hr />
]]></content>
</entry>
</feed>