Használja az brain.js-t neurális hálózat kiépítéséhez

Szerző: Randy Alexander
A Teremtés Dátuma: 26 Április 2021
Frissítés Dátuma: 20 Június 2024
Anonim
Használja az brain.js-t neurális hálózat kiépítéséhez - Kreatív
Használja az brain.js-t neurális hálózat kiépítéséhez - Kreatív

Tartalom

A Brain.js egy fantasztikus módszer az ideghálózat kiépítésére. Egyszerűen fogalmazva: a neurális hálózat a gépi tanulás olyan módszere, amely az emberi agyhoz hasonlóan működik. Ha egy kérdésre helyes választ ad (például: „Melyik lehetőséget választja ez a felhasználó?”), Lassan megtanulja a bemenetek és válaszok mintázatát és kapcsolatát. Az ideghálózat egyik példája a Facebook arcfelismerő rendszere, a DeepFace.

De az ideghálózatok bonyolult tartománynyelve és a látszólag meredek tanulási görbe miatt nehéz lehet elindulni.

Ebben az oktatóanyagban az elméletet a szükséges ismeretekig bontjuk le, és ami fontos, ragaszkodni fogunk ahhoz, hogy a brain.js-t ténylegesen használjuk ideghálózat létrehozásához. A végére lesz egy webalkalmazása, amely feleletválasztós kérdéseket tesz fel a felhasználó optimizmusával kapcsolatban. Benyújtásukkor ezek a válaszok ideghálózatot képeznek annak valószínűségére, hogy felhasználónk egy új kérdésre választja az egyes lehetőségeket.


Szeretne még hasznos web-tervező eszközöket? Tekintse meg a tökéletes weboldal-készítő kiválasztásáról szóló bejegyzésünket. Vagy ha valahová szüksége van a fájlok biztonságos tárolására, nézze meg a legjobb felhőtárhelyet. Összetett weboldalt tervez? Szüksége lesz egy robusztus webtárhely-szolgáltatásra, amely képes lépést tartani.

Töltse le az oktatóanyaghoz szükséges fájlokat.

01. Állítsa be a projektet

Először töltse le és telepítse a szükséges függőségeket. Ez az oktatóanyag feltételezi, hogy rendelkezik a React gyakorlati ismereteivel, vagy ennek megfelelő leképezéssel az előnyben részesített alternatívához.

Hozzon létre egy React alkalmazást a kívánt módszerrel. Kipróbálhatja a Facebook-ot create-reagál-app eszköz, amelyet az alábbiak szerint telepítettek:

npm install create-reagál-app -g

02. Indítsa el az alkalmazást

Most elkészíthetjük, telepíthetjük az brain.js fájlt, és elindíthatjuk az alkalmazásunkat:

npx create-react-app optimism-nn cd optimism-nn npm install brainjs npm start

Végezni fogjuk a neurális hálózat számítását a böngészőben. Az ideghálózatok erőforrás-igényesek, ezért ki kell tölteni őket egy szerverre. Ez a módszer azonban gyorsan beállítható és kielégíti alapvető szükségleteinket. Most adjuk hozzá a brain.js-t a belépési pontunkhoz (esetemben az App.js-hez).


importálja az agyat az „brain.js” -ből;

03. Határozza meg edzéssel kapcsolatos kérdéseit

A továbbiakban meg kell határoznunk a képzési kérdéseinket. Külön-külön kérdések.js fájlra lesz szükségünk képzésKérdések és validationQuestions sor. Megtalálhatja a listámat a Git repóban, vagy létrehozhatja sajátját. Minél több edzéssel kapcsolatos kérdése van, annál pontosabbak az eredményei. Ne felejtse el ezeket importálni a belépési pontba.

export const trainingQuestions = [{id: 'q1', kérdés: 'Gyakran látja a legjobban a dolgokat?', opciók: [{id: 'q1a', címke: 'Nem igazán', értéke: 0,2,}, { id: 'q1b', címke: 'Mindig', értéke: 1,0,}, {id: 'q1c', címke: 'Általában igen ", értéke: 0,7,}, {id:' q1d ', címke:' Soha ! ', értéke: 0,0,},],},];

Mindkét tömbhöz szükségünk van egy kérdésre, négy opció tömbjére, amely címkét és optimizmus értéket tartalmaz. Ez az érték lesz a neurális hálózatunk bemenete.


Győződjön meg arról, hogy változtatja az értékek sorrendjét és egyensúlyát, különben a neurális hálózat túlságosan a tömb opcióinak indexére koncentrálhat! Neurális hálózatunk négy bemenetet és négy kimenetet ad. Edzési adatainknak meg kell egyezniük ezzel, így konstruktorunkban szükségünk van valamilyen állapotra a kvízhez és a felhasználó lehetőségeihez:

this.state = {képzésVálaszok: trainingQuestions.map (() => Tömb (4) .kitöltés (0)), képzés: hamis, jóslatok: undefined,};

04. Inicializálja az ideghálózatot

A trainingAnswers minden kérdéshez létrehoz egy tömböt, amely [0, 0, 0, 0] értéket tartalmaz - alapértelmezett állapotunk, nincs kiválasztás. Meg kell majd inicializálnunk ideghálózatunkat is - csak egyetlen sort az brain.js-vel:

this.net = új agy.NeuralNetwork ({hiddenLayers: [4]});

05. Építsd meg a kvíz keretrendszert

A kvíz keretrendszerének felépítéséhez át kell tekintenünk képzési kérdéseinket és lehetőségeinket. Ez meglehetősen bőbeszédű és nem túl érdekes, ezért adok egy példát a kimenetre, amelyre inkább törekedhet:

render () {return (main> form onSubmit = {this.onSubmit}> [...] // kérdések és opciók ismétlése div className = "question"> h4> {question} / h4> div className = "options" > label htmlFor = {optionId}> span> {label} / span> input type = "radio" kötelező név = {questionId} id = {optionId} ellenőrizve = {() => this.isOptionChecked (questionIndex, optionIndex)} onChange = {() => this.onOptionChange (questionIndex, optionIndex)} /> / label> [...] / div> / div> [...] gomb típusa = "beküldés"> Küldés / gomb> / űrlap> / main>); }

Ha még nem ismeri a React alkalmazást, olvassa el az űrlapok dokumentációját.

Írhatjuk a mi isOptionChecked és onOptionChange a következő funkciók:

isOptionChecked = (questionIndex, optionIndex) => (this.state.trainingAnswers [questionIndex] [optionIndex]! == 0); onOptionChange = (questionIndex, optionIndex) => {this.setState (prevState => {const {trainingAnswers} = Object.assign (prevState, {}); trainingAnswers [questionIndex] = Array (4) .fill (0); trainingAnswers [ questionIndex] [optionIndex] = 1; return {trainingAnswers};}); };

06. A neuronhálózat edzése

Most, amikor felhasználónk egy lehetőségre kattint, frissítjük a relevánsat képzésVálaszok tömb a 1 a kiválasztott indexben, és változtassa meg a választógomb állapotát, hogy az ellenőrizve legyen.

Ideje hozzáadni a onSubmit funkció, ahol felépítjük a képzési adatokat és kiképezzük az ideghálózatot:

onSubmit = e => {e.preventDefault (); const {trainingAnswers} = ez.állapot; const trainingData = trainingQuestions.map ((q, i) => ({input: q.options.map (o => o.value), output: trainingAnswers [i],})); this.setState ({edzés: igaz,}); this.net.trainAsync (trainingData) .then (res => {console.log (res); // Naplózza a hibaarányt és # iterációt this.getPredictions ()}); }

Looping képzésKérdések, létrehozzuk a szükséges bemeneti és kimeneti tömböket. A bemeneti adatokat úgy kapjuk meg, hogy vesszük az egyes opciók optimizmusának értékét, és a kimeneti adatokat a képzésVálaszok tömb ugyanazon az indexen, mint a kérdés.

Ezt követően frissítjük az állapotot képzés: igaz tájékoztatni a felhasználót arról, hogy az ideghálózat tanul. Az ügyféleszköz feldolgozási teljesítményétől és hány kérdésedtől függően a folyamat másodperceket, perceket vagy tovább tarthat!

Végül átadjuk az edzés adatait az ideghálózatunknak, és azt mondjuk, hogy aszinkron módon edzen. Ez egy ígéretet eredményez, amelyet akkor teljesítenek, amikor a hálózat megtalálta a mintát vagy feladta.

Figyelje a bejelentett hibaarányt trainAsync. Ideális esetben 0 és 0,05 között kell lennie. Ha magasabb, ellenőrizze az edzés adatait.

Innen megkaphatjuk jóslatainkat:

getPredictions = () => {const prediktívok = validationQuestions.map (q => (this.net.run (q.options.map (o => o.value)))); this.setState ({edzés: hamis, jóslatok,}); }

Használata net.run, arra kérjük az újonnan kiképzett neurális hálózatunkat, hogy adja meg előrejelzéseit a korábban definiált minden egyes validálási kérdésre.

A nagy fináléhoz hozzáadjuk a feltételes betöltési logikánkat, és bemutatunk egy megállapítást a felhasználónak.

render () {const {edzés, jóslatok} = this.state; const validationQuestion = validationQuestions [0]; visszatérés (fő> {edzés && (h2> Betöltés… / h2>)} {! előrejelzések és&! edzés és& ([...] // Képzési kérdések űrlapja)} {jóslatok és&! edzés és& (div> h2> az ideghálózat: / h2> div className = "question"> h4> {validationQuestion.question} / h4> div className = "options"> {validationQuestion.options.map ((o, i) => (label key = { o.id}> {/ * a címke és a valószínűség megjelenítése kerek százalékban * /} span> {$ {o.label}: $ {Math.round (előrejelzések [0] [i] * 100)} %} / span> / label>))} / div> / div> / div>)} / main>); }}

07. Bővítse a hálózatot

Most megvan a kvíz alapvető keretrendszere, próbálja meg kibővíteni a következőkkel:

Keresse meg neurális hálózatának tényleges hibaarányát azáltal, hogy a felhasználó válaszol az érvényesítési kérdésekre. Nézze meg, hányszor választották a legjobb tippet.

A neuronhálózatot ezekkel a kiegészítő válaszokkal képezheti ki, és hátha javíthatja a pontosságot.


Helyezze az ideghálózati számításokat egy Node szerverre az brain.js segítségével funkcionálni, működtetni() és toJSON () mód.

Ez a cikk eredetileg a 321. számban jelent meg net magazin, a világ vezető webdesign magazinja. Vásárolja meg a 321. számot vagy iratkozz fel a netre

Szerkesztő Választása
Hogyan rögzítsük a mozgást a 3D-s megjelenítésekben
Olvass Tovább

Hogyan rögzítsük a mozgást a 3D-s megjelenítésekben

zabadú zó művé zként különféle ki projekteken dolgozom, amelyek több égében 3D művé zet é e zközök létrehozá ával ...
Hozzon létre egy absztrakt kollázshatást
Olvass Tovább

Hozzon létre egy absztrakt kollázshatást

Ebben az oktatóanyagban elmagyarázom, hogyan lehet lenyűgöző műalkotá t ké zíteni a tárgyakban talált termé zete elemek é rejtett formák felha zn...
Miért rontja el túl sok tervező a műtermet
Olvass Tovább

Miért rontja el túl sok tervező a műtermet

A Made Thought e etében a méretről é a dinamikáról folytatott vita állandó, é azt tapa ztaltuk, hogy a vála z valójában attól függ, hog...