Tässä artikkelissa opimme integroimaan hermoverkon SBC. Luomme 3-kerroksisen hermoverkon funktion sin(x) approksimoimiseksi.
Prosessi on jaettu kahteen osaan: 1. verkon koulutus, joka tehdään PC:llä ja; 2. verkon käyttäminen, joka tehdään SBC:ssä.
Osa 1. Neuroverkkokoulutus
Tässä osassa käytämme Jupyter-muistikirjoja Keras-, Numpy- ja Pylab-kirjastojen kanssa.
Vaihe 1. Tuo tarvittavat kirjastot
Vaihe 2. Luo harjoitustietojoukko
Tietojoukkomme koostuu 10000 0 satunnaisluvusta välillä 2 – 0*pi syötteenä X ja niitä vastaavasta sin-funktiosta syötteenä Y. Huomaa, että olemme säätäneet alueen Y alueelle 1-XNUMX.
Vaihe 3. Luo hermoverkko
Neuroverkon luomiseksi luomme malliobjektin ja lisäämme siihen 3 kerrosta. Tämä tehdään Keras-kirjaston tarjoaman API:n kautta.
Hermosolujen lukumäärä on 32 ensimmäisessä kerroksessa, 32 keskikerroksessa ja 1 ulostulossa.
Käytämme relu- ja sigmoid-aktivaatioita.
Käytetty optimoija on Adam ja virhefunktio MSE.
Verkkoparametrien määrä on 1153.
Vaihe 4. Koulutus
Harjoittelussa hermoverkko käyttää tietojoukkoa säätääkseen parametrejaan siten, että virhe minimoidaan.
Tässä tapauksessa välitimme koko tietojoukon verkon läpi 10 kertaa, 32 näytteen erissä.
Kuten näemme, koulutuksen lopussa virhe on hyvin pieni, 2.5e-5.
Vaihe 5. Vahvistus
Nyt testaamme hermoverkkoa viimeisen kerran ja vertaamme sitä odotettuihin arvoihin. Kuten kaaviosta näkyy, verkko approksimoi sinifunktiota melko hyvin.
Vaihe 6. Vie tiedot
Tämän toiminnon avulla voit viedä hermoverkon painot tekstitiedostoon ja ladata sen sitten SBC:stä.
Osa 2. Toteutus SBC:ssä
Ensinnäkin tarkastelemme hermoverkon toteutusta.
Neuraaliverkko on jaettu 4 luokkaan: Neural_Network, Layer, Perceptron ja Activation.
Jokaisella luokalla on periaatteessa 1 menetelmä nimeltä prosessi, joka vastaa kaiken työn tekemisestä sekä lataus- ja tallennusmenetelmistä.
Aktivointi luokka, toteuttaa lineaariset, relu-, sigmoid- ja tanh-aktivointitoiminnot.
perceptron luokka on vastuussa kaikkien kertolaskujen suorittamisesta. Huomaa, että vektorin kertolaskutoiminto on toteutettu ASM:ssä, jotta suorituskykyä ei uhrata.
ASM vs Python toteutus
Vektorikerroin vastaa suurimmasta osasta suorittimen käyttöä, joten sen toteuttaminen ASM:llä mahdollistaa kirjaston suorituskyvyn parantamisen huomattavasti. Tässä esimerkissä suoritetaan yksinkertainen 100 × 100 vektorin kertolasku. Python-toteutus kestää 1339 us, kun taas ASM-toteutus kestää vain 28 us. Tämä on noin 50 kertaa nopeampi, samalla kun samat lähtöarvot säilyvät.
kerros luokka ryhmittelee muutaman perceptronin rinnakkain.
Luokka Neural Network pinoaa kaikki verkon kerrokset.
Lopuksi voimme tarkastella/tarkistaa verkon käytön.
Kopioimme painot sisältävän tiedoston SBC:hen ja suoritamme seuraavan main.py:n.
Tämä koodi lataa verkon sine.unn-tiedostosta ja laskee sinin 0.123:sta ja näyttää sitten verkon saaman arvon ja reaalisinin sekä laskenta-ajan mikrosekunteina.
ulostulo:
Kuten näemme, tulos lähentää odotettua arvoa 4 desimaalilla.
Tämä verkko, jossa oli 1153 painoarvoa, vaati 4612 (1153*4) tavua RAM-muistia painojen tallentamiseen kelluvana arvona ja 5.8 ms käsittelyyn.