Brain.js er en fantastisk måte å bygge et nevralt nettverk på. Enkelt sagt, et nevralt nettverk er en metode for maskinlæring som fungerer på samme måte som en menneskelig hjerne. Gitt det riktige svaret på et spørsmål (som "hvilket alternativ vil denne brukeren velge?"), Lærer det langsomt mønsteret og forholdet mellom inngangene og svarene. Et eksempel på et nevralt nettverk er Facebooks ansiktsgjenkjenningssystem, Deepface.
Men på grunn av det komplekse domenespråket til nevrale nettverk og tilsynelatende bratte læringskurve, kan det være vanskelig å komme i gang.
I denne opplæringen vil vi destillere teorien ned til å trenge å vite og, viktigere, bli sittende fast med å faktisk bruke hjerne.js for å skape et nevralt nettverk. På slutten vil du ha en webapp som spør flere valgspørsmål om en brukers optimisme. Når de sender inn, vil disse svarene trene et nevralt nettverk til sannsynligheten for at brukeren vår velger hvert alternativ for et helt nytt spørsmål.
Ønsker du mer nyttige webdesignverktøy? Se vårt innlegg på å plukke den perfekte Nettstedbygger . Eller hvis du trenger et sted å lagre filer sikkert, sjekk ut vårt valg av det beste skylagring . Planlegger en kompleks nettside? Du trenger en robust Web Hosting. service, som kan holde tritt.
Last ned filene du trenger for denne opplæringen.
For det første, last ned og installer de nødvendige avhengighetene. Denne opplæringen antar at du har en arbeidskunnskap om reagert, eller tilsvarende kartlegging til et foretrukket alternativ.
Opprett en reakt-app ved hjelp av ønsket metode. Du kan prøve Facebook Opprett-reagert-app verktøy, installert ved hjelp av følgende:
npm install create-react-app -g
Nå kan vi bygge, installere hjerne.js, og start vår app:
NPX CREATE-REACT-APP OPTIMISM-NN
CD optimisme-nn
NPM Installer Brainjs.
npm start
Vi skal utføre den nevrale nettverksberegningen på nettleseren. Neurale nettverk er ressursintensive og bør lastes ned til en server. På denne måten er denne måten rask å sette opp og fint for våre grunnleggende behov. La oss nå legge til hjerne.js til vårt inngangspunkt (i mitt tilfelle, app.js).
Importer hjernen fra 'brain.js';
Vi må definere våre treningsspørsmål neste. I en egen spørsmål.js. fil, vi trenger en opplæring og valideringquestions. array. Du kan finne listen min på GIT Repo eller lage din egen. Jo flere treningsspørsmål du har, jo mer nøyaktige resultatene dine. Husk å importere disse til inngangspunktet ditt.
Eksporter Const TrainingQuestions = [
{
ID: 'Q1',
Spørsmål: "Ser du ofte det beste i ting?",
Alternativer: [
{ID: 'Q1A', etikett: 'ikke egentlig', verdi: 0,2,},
{ID: 'Q1B', etikett: 'Alltid', Verdi: 1.0,},
{ID: 'Q1C', etikett: 'Vanligvis yeah', Verdi: 0,7,},
{ID: 'Q1D', etikett: 'Aldri!', Verdi: 0.0,},
],
},
];
For begge arrays trenger vi et spørsmål, en rekke fire alternativer som inneholder en etikett og en optimismeverdi. Denne verdien vil være inngangen til vårt neurale nettverk.
Sørg for at du varierer bestillingen og balansen mellom verdier, eller det nevrale nettverket kan fokusere for mye på indeksen for alternativene i arrayet! Vårt neurale nettverk tar fire innganger og gir fire utganger. Våre treningsdata må samsvare med dette, så i vår konstruktør trenger vi noen stat for quizen og brukerens alternativer:
This.State = {
TrainingAnswers: TrainingQuestions.Map (() = & gt; Array (4) .Fyll (0)),
Opplæring: Falsk,
Forutsigelser: undefined,
};
Initialiseringen av treningsanvisere skaper en matrise for hvert spørsmål som inneholder [0, 0, 0, 0] - vår standardstatus uten valg. Vi kommer også til å trenge å initialisere vårt neurale nettverk - bare en enkelt linje med hjerne.js:
This.net = Ny Brain.NeuralNetwork ({HiddenLayers: });
For å bygge rammen for vår quiz, må vi sløyfe over våre treningsspørsmål og alternativer. Dette er ganske verbose og ikke veldig interessant, så jeg vil gi et eksempelutgang for deg å sikte på i stedet:
gjengivelse () {
komme tilbake (
& lt; main & gt;
& lt; form onsubmit = {this.onubmit} & gt;
[. . .] // iterate over spørsmål og amp; Alternativer
& lt; div classname = "spørsmål" & gt;
& lt; h4 & gt; {spørsmål} & lt; / h4 & gt;
& lt; div classname = "alternativer" & gt;
& lt; etikett htmlfor = {opsjonsid} & gt;
& lt; span & gt; {label} & lt; / span & gt;
& lt; input
Type = "Radio"
kreves
NAME = {SMECIESID}
id = {opsjonid}
sjekket = {() = & gt; this.iSoPtionChecked (QuestionIndex, OptionIndex)}
Onchange = {() = & gt; This.OntionChange (QuestionIndex, OptionIndex)}
/ & gt;
& lt; / label & gt;
[. . .]
& lt; / div & gt;
& lt; / div & gt;
[. . .]
& lt; button type = "Send" & gt; Send inn & lt; / knappen & gt;
& lt; / form & gt;
& lt; / main & gt;
);
}
Hvis du er ny for å reagere, se Dokumentasjon for byggeformer.
Vi kan skrive vår isoptionChecked. og OnOptionChange. Fungerer neste:
IsoptionChecked = (QuestionIndex, OptionIndex) = & gt; (
this.State.traininganswers [QuestionIndex] [OptionIndex]! == 0
);
OnOptionChange = (QuestionIndex, OptionIndex) = & gt; {
This.SetState (Prevstate = & GT; {
const {TrainingAnswers} = Object.Assign (Prevstate, {});
TrainingAnswers [Questionindex] = Array (4) .Fyll (0);
treningsanvisere [spørsmålet] [OptionIndex] = 1;
returnere {TrainingAnswers};
});
};
Nå, når brukeren vår klikker et alternativ, oppdaterer vi det aktuelle treningsanvisere array for å ha en 1 I den valgte indeksen og endre tilstanden til radioknappen for å vise den som sjekket.
Tid til å legge til vår Onsubmit. Funksjon, hvor vi bygger treningsdataene og trener det nevrale nettverket:
Onsubmit = E = & GT; {
e.preventdefault ();
const {TrainingAnswers} = This.State;
cond treningData = treningquestions.map ((q, i) = & gt; ({
INPUT: Q.OPTIONS.MAP (O = & GT; O.VALUE),
Output: Traininganswers [i],
}));
this.setState ({
Opplæring: True,
});
this.net.trainasync (TrainingData)
.Den (res = & gt; {
konsoll.log (res); // Logg feilfrekvensen og # iterasjoner
this.getPredictions ()
});
}
Looping over opplæring , Vi lager inngangs- og utgangsarrayene vi trenger. Vi får inngangsdataene ved å ta optimismeverdien til hvert alternativ, og vi får utdataene fra å se i treningsanvisere array på samme indeks som spørsmålet.
Etter det oppdaterer vi staten med Opplæring: TRUE å informere brukeren om at nevrale nettverket er læring. Avhengig av behandlingskraften til klientenheten og hvor mange spørsmål du har, kan prosessen ta sekunder, minutter eller lenger!
Endelig passerer vi treningsdataene over til vårt neurale nettverk og forteller det å trene asynkront. Dette returnerer et løfte som er oppfylt når nettverket har funnet mønsteret eller gitt opp.
Hold øye med feilfrekvensen vi logger på Trainasync. . Ideelt sett bør det være mellom 0 - 0,05. Hvis det er høyere, må du sjekke treningsdataene dine.
Derfra kan vi få våre spådommer:
GetPredictions = () = & gt; {
CONT PREDICTIONS = Validationquestions.Map (q = & gt; (
this.net.run (q.options.map (o = & gt; o.value))
));
this.setState ({
Opplæring: Falsk,
Forutsigelser,
});
}
Ved hjelp av net.run. , Vi spør vårt nyutdannede neurale nettverk for å gi oss sine spådommer for hvert av de valideringsspørsmålene vi definerte tidligere.
For Grand Finale legger vi til vår betingede laster logikk og presenterer et funn til brukeren.
gjengi () {
const {trening, spådommer} = dette.State;
const Validationquestion = Validationquestions ;
komme tilbake (
& lt; main & gt;
{Training & amp; & amp; (
& lt; h2 & gt; laster ... & lt; / h2 & gt;
)}
{! spådommer & amp; ! Training & amp; & amp; (
[. . .] // Opplæringsspørsmål
)}
{predictions & amp; & amp; ! Training & amp; & amp; (
& lt; div & gt;
& lt; h2 & gt; Vi spurte nevrale nettverket: & lt; / h2 & gt;
& lt; div classname = "spørsmål" & gt;
& lt; h4 & gt; {validationquestion.question} & lt; / h4 & gt;
& lt; div classname = "alternativer" & gt;
{valideringquestion.options.map ((o, i) = & gt; (
& lt; Label nøkkel = {o.id} & gt;
{/ * Vis etiketten og sannsynligheten som en rund prosentandel * /}
& lt; span & gt; {$ {o.label}: $ {matte.Round (spådommer [i] * 100)}%} & lt; / span & gt;
& lt; / label & gt;
))}
& lt; / div & gt;
& lt; / div & gt;
& lt; / div & gt;
)}
& lt; / main & gt;
);
}
}
Nå har du det grunnleggende rammen for quizet, prøv å forlenge det med følgende:
Finn den virkelige feilfrekvensen på ditt neurale nettverk ved å la brukeren svare på dine valideringsspørsmål. Se hvor mange ganger de valgte ditt beste gjetning.
Tren det nevrale nettverket med disse ekstra svarene og se om du kan forbedre nøyaktigheten.
Flytt de nevrale nettverksberegningene over på en node-server med hjernen.js å fungere() og tojson () metoder.
Denne artikkelen oppstod opprinnelig i utgave 321 i Net Magazine. , verdens ledende webdesign magasin. Kjøp utgave 321. eller Abonner på netto .
Les mer:
[1. 3] Side 1 av 2: Side 1 Side 1 Side 2 ..
Hvis du alltid har ønsket å vite hvordan du tegner fjær, og gjør dem super-realistiske, er du på rett sted. Denne trinnvise veiledningen gir hint og tips om å gi fuglfjær en mer tredim..
Tapt kjærlighet [1. 3] av Canada's. Jam3. [1. 3] Er et vakkert mørkt, mobilklart interaktivt dikt med ekte hjerte om de..
[1. 3] Imagined scener som lar deg en følelse av rart at du vil finne ut mer og se hva som ligger rett rundt hjørnet. God verden..
[1. 3] Tegning med blekk produserer store muligheter. Det er enkle, men effektive måter å lage vakre, organiske teks..
[1. 3] I denne korte Illustrator Tutorial , designer Vil Paterson. Går gjennom hvordan du lager en ..
[1. 3] Selvutgivelser står for 22 prosent av det britiske ebook-markedet og fortsetter å vokse, noe som betyr at forfattere blir..
[1. 3] Dette innlegget vil lære deg hvordan du tegner et landskap med pasteller. Når du bruker myke pasteller, er du i stand til..