WEBVTT

00:00.520 --> 00:02.690
Bună ziua și bun venit la acest tutorial Python.

00:02.860 --> 00:05.680
Bine, deci avem foarte interesant ca solul sa fie in fata noastra.

00:05.680 --> 00:10.690
Vom începe prin crearea arhitecturii rețelei neuronale, adică vom face rețeaua neuronală

00:10.690 --> 00:16.740
care va fi în centrul AI și care va readuce acțiunea la 90 de ani.

00:16.930 --> 00:18.060
Deci, să facem asta.

00:18.130 --> 00:23.130
Deoarece dorim ca rețeaua noastră neuronală să fie obiectivă, o să o facem clasă.

00:23.200 --> 00:25.100
Și asta pentru că este mult mai convenabil.

00:25.180 --> 00:28.370
Știți că clasa este modelul pe care vrem să-l construim.

00:28.540 --> 00:34.000
Vrem să construim o rețea neuronală și trebuie să facem niște instrucțiuni care vor fi toate conținute

00:34.090 --> 00:35.080
în clasă.

00:35.140 --> 00:37.910
Și în această clasă vom face două funcții.

00:37.960 --> 00:42.810
Mai întâi, funcția init este funcția care apare tot timpul când faceți clasă.

00:43.000 --> 00:47.770
Și aceasta definește în esență variabila obiectului dvs. care este rețeaua neurală.

00:47.920 --> 00:52.600
Știți variabilele atașate la obiect, spre deosebire de variabilele globale.

00:52.840 --> 00:57.910
Și așa este în această funcție care va defini arhitectura noii rețele pe care o cunoașteți definind

00:57.910 --> 01:03.460
stratul de intrare care va fi compus din cinci neuroni de intrare deoarece avem cinci dimensiuni pentru vectorul

01:03.790 --> 01:05.680
codat al stărilor de intrare.

01:05.890 --> 01:08.080
Atunci vom defini câteva straturi ascunse.

01:08.110 --> 01:12.940
Poate că veți începe cu un strat ascuns și apoi veți fi bineveniți să încercați alte arhitecturi

01:12.940 --> 01:13.920
ale rețelei neuronale.

01:14.200 --> 01:20.080
Și apoi, bineînțeles, vom ajunge la stratul de ieșire care va conține acțiunile posibile pe care le

01:20.110 --> 01:21.940
putem juca în fiecare moment.

01:22.180 --> 01:24.730
Deci asta este exact ceea ce vom face în această funcție.

01:24.850 --> 01:30.460
Și apoi vom face o altă funcție încă în interiorul clasei care va fi funcția forward

01:30.460 --> 01:34.870
și care va fi funcția care va activa neuronii din rețeaua neuronală.

01:34.870 --> 01:40.570
Știți că acest lucru va activa semnalele și deci vom folosi o funcție de activare

01:40.570 --> 01:46.920
rectificată deoarece, desigur, avem de-a face cu o problemă pur neliniară și această funcție rectificată întrerupe liniaritatea.

01:47.200 --> 01:53.340
Dar mai ales facem ca funcția Ford să returneze valorile q care sunt ieșirile rețelei.

01:53.500 --> 01:56.110
Dar avem o valoare cheie pentru fiecare acțiune.

01:56.200 --> 02:02.710
Și mai târziu vom reveni la acțiunea finală fie prin luarea valorilor cheie maxime, fie prin utilizarea

02:02.710 --> 02:03.880
unei metode Max.

02:04.030 --> 02:05.270
Vom vedea asta după aceea.

02:05.440 --> 02:10.330
Deci, în acest tutorial vom începe prin implementarea funcției init și apoi

02:10.330 --> 02:12.880
următorul va fi implementarea funcției forward.

02:12.880 --> 02:13.810
Deci, să facem asta.

02:13.810 --> 02:17.060
Mai întâi trebuie să introducem clasa noastră.

02:17.200 --> 02:22.930
Așa că începem cu clasa și ne dăm un nume clasei noastre, unde putem să o numim rețea.

02:23.650 --> 02:29.980
Și apoi în această clasă de rețea voi folosi o tehnică de programare a obiectelor care se numește moștenire

02:30.310 --> 02:35.120
și care este doar de a moșteni de la toate instrumentele unei clase părinte.

02:35.200 --> 02:41.550
Deci, clasa noastră de rețea pe care o vom face este un test pentru o clasă mai mare, care este.

02:41.770 --> 02:44.110
Și acel modul.

02:44.470 --> 02:50.790
Deci, doar pentru a moșteni de la toate instrumentele din această clasă modul care, desigur, instrumentele pentru a implementa

02:50.790 --> 02:51.940
o rețea neuronală.

02:51.940 --> 02:57.880
Deci, este un truc foarte puternic și de evoluție în programarea orientată pe obiecte, care se întâmplă cu succes.

02:57.910 --> 03:02.670
Și chiar acum moștenim din această clasă părinte modul.

03:02.800 --> 03:06.000
Bine și acum suntem gata să intrăm în clasă.

03:06.130 --> 03:12.910
Așadar, apăs de două ori pentru că vom face două funcții și începem cu funcția

03:13.140 --> 03:14.280
de sfârșit.

03:14.350 --> 03:20.470
Deci, funcția init trebuie să o numim în acest fel cu doi pe acest curs apoi pe ea.

03:20.650 --> 03:25.750
Și apoi, pentru a sublinia că este doar o sintaxă Python, așa trebuie să facem.

03:25.930 --> 03:28.460
Și apoi trebuie să punem argumentele.

03:28.720 --> 03:30.340
Deci, avem trei argumente.

03:30.340 --> 03:35.800
Primul este un argument obligatoriu care este de fapt Eul și Sinele.

03:35.800 --> 03:42.250
Nu există nici un mister care să se refere la obiectul care va fi creat din această clasă pe care o vom

03:42.250 --> 03:42.810
face.

03:42.820 --> 03:44.400
Știi că facem această clasă.

03:44.470 --> 03:48.980
Este ca o instrucțiune un model al acestei rețele neuronale pe care dorim să o construim.

03:49.180 --> 03:53.620
Și apoi, odată ce clasa este gata, putem face cât mai multe rețele cu dorințele noastre.

03:53.620 --> 04:00.130
Și fiecare dintre aceste noi rețele va fi un obiect al acestei clase și din moment

04:00.400 --> 04:07.630
ce vom folosi obiectul pentru alte scopuri, avem nevoie, dar care sunt variabilele obiectului, iar Spudis folosim acest sine

04:07.630 --> 04:11.900
aici pentru a specifica că noi se referă la obiect.

04:12.100 --> 04:18.430
Deci ori de câte ori doresc să folosesc disponibil din obiectul meu, voi folosi eu înaintea variabilei pentru a

04:18.430 --> 04:21.340
specifica că aceasta este o variabilă a obiectului.

04:21.340 --> 04:25.680
În regulă, acesta este primul argument și apoi avem două alte argumente

04:25.680 --> 04:30.240
care sunt, desigur, numărul de neuroni de intrare și numărul de neuroni de ieșire.

04:30.550 --> 04:38.220
Deci, numărul de neuroni de intrare o vom numi dimensiune de intrare și de fapt cinci, deoarece

04:38.310 --> 04:45.890
vectorii de intrare au cinci dimensiuni până la trei semnale plus orientare plus minus orientare care sunt

04:45.900 --> 04:51.020
vectori ai valorilor codificate care descriu o stare a mediului.

04:51.210 --> 04:54.960
Aceste cinci valori sunt suficiente pentru a descrie o stare a mediului.

04:54.960 --> 05:00.600
Ne-am fi putut gândi la mai puține valori sau la mai multe valori, dar asta am încercat și are sens, pentru

05:00.600 --> 05:05.520
că de fapt avem nevoie de un semnal din stânga în fața noastră și unul în dreapta.

05:05.520 --> 05:10.860
Știți când conducem o mașină am fi putut merge pentru un semnal de 360 ​​pe care îl cunoașteți

05:10.860 --> 05:17.370
ca semnalele de la vârful mașinilor Google pe care le putem conduce în totalitate cu trei senzori și apoi avem această orientare

05:17.400 --> 05:22.200
și minus orientarea către dvs. știți să urmăriți obiectivul pe care încercați să îl atingeți.

05:22.530 --> 05:29.160
Și apoi avem, desigur, neuronii de ieșire din rețeaua noastră care corespund acțiunilor și avem trei acțiuni posibile

05:29.160 --> 05:32.840
care merg în stânga mergând direct sau mergând bine.

05:32.880 --> 05:38.520
Și, prin urmare, o voi numi și acțiunea și vor fi trei dintre ei.

05:38.520 --> 05:39.030
In regula.

05:39.120 --> 05:44.850
Până acum, trebuie să dăm nume doar intrărilor și apoi vom folosi aceste mingi de volei pentru a face condițiile

05:44.940 --> 05:46.140
din interiorul rețelei neuronale.

05:47.090 --> 05:55.010
În regulă atunci începeți să utilizați un alt truc cu torțe acest truc este o superfuncție care

05:55.010 --> 05:59.310
este o funcție care de fapt moștenește din modul.

05:59.390 --> 06:02.730
De aceea a trebuit să folosim moștenirea pentru a moșteni modulul.

06:02.750 --> 06:04.440
Acesta este primul care va fi folosit.

06:04.520 --> 06:11.120
Și, practic, folosim doar această superfuncție super-truc pentru a putea folosi instrumentele modulului care sunt

06:11.580 --> 06:13.320
mult mai eficiente.

06:13.670 --> 06:18.620
Și în interiorul superfuncției trebuie doar să precizez rețeaua.

06:18.650 --> 06:25.100
Deci aceasta este clasa noastră de rețea chul pe care o cunoașteți deoarece aceasta moșteneste de la clasa parentală

06:25.550 --> 06:27.360
modul și apoi obiectul nostru.

06:27.380 --> 06:35.220
Si apoi adaug doar asta si sunt intr-o functie asa cum am numit-o.

06:35.570 --> 06:39.350
Bine, deci este doar un truc care este doar de a folosi toate instrumentele pe care le am.

06:39.360 --> 06:46.270
Și în modulul respectiv putem trece la pasul următor, care va specifica stratul de intrare.

06:46.550 --> 06:53.300
Deci, practic ceea ce trebuie să fac este să introduc o nouă variabilă care va fi atașată la obiect

06:53.300 --> 06:57.120
și această variabilă va conține numărul de neuroni de intrare.

06:57.170 --> 07:05.140
Așadar, pentru a nu fi confundată cu mărimea intrării dimensiunii de intrare este argumentul funcției de sfârșit.

07:05.180 --> 07:09.710
Dar aceasta nu este variabila care este atasata obiectului inca variabila care este atasata

07:09.710 --> 07:10.360
obiectului.

07:10.520 --> 07:16.520
După cum am menționat deja, trebuie să precizăm că este atașat de obiect, așa că folosim

07:17.230 --> 07:22.130
un auto-predat și acum ne dăm un nume acestei prime variabile atașate obiectului.

07:22.190 --> 07:24.870
Și astfel putem da pur și simplu același nume ca și intrarea.

07:24.920 --> 07:33.650
Putem numi dimensiunea de intrare și vom spune că este egală cu argumentul o funcție care este mărimea intrării.

07:33.680 --> 07:34.080
In regula.

07:34.130 --> 07:39.900
De fiecare dată când creez un obiect din clasa de rețea și precizez dimensiunea de intrare, ca de

07:39.900 --> 07:41.170
exemplu, pun 5.

07:41.180 --> 07:47.330
Nu va fi de 5 aici și prin urmare variabila dimensiunii de intrare a obiectului nostru va avea valoarea de 5

07:47.690 --> 07:54.110
deoarece această mărime de intrare aici va fi de 5 și, prin urmare, noua noastră rețea va avea 5 neuroni de intrare

07:54.110 --> 07:55.470
în stratul de intrare.

07:55.490 --> 07:55.790
In regula.

07:55.790 --> 08:02.180
Și apoi este același pentru cealaltă variabilă pe care vrem să o atașăm obiectelor.

08:02.210 --> 08:08.100
Și, după cum probabil ați ghicit, aceasta va fi o variabilă pentru numărul de neuroni de ieșire.

08:08.330 --> 08:15.030
Și să spunem că ne luăm propriul nostru obiect și apoi dăm un nume acestei a doua variabile a obiectului

08:15.040 --> 08:17.740
pe care îl vom numi și acțiunea.

08:18.170 --> 08:23.600
Și acest lucru va fi egal cu acest argument dat fiind numărul de acțiuni care reprezintă numărul de neuroni

08:23.600 --> 08:24.250
de ieșire.

08:24.530 --> 08:30.850
Așa că am stabilit-o egală cu acțiunea de fapt și acțiunea va fi egală cu trei.

08:30.890 --> 08:37.930
Prin urmare, variabila și acțiunea atașată obiectului nostru la o rețea vor primi valoarea de trei.

08:38.240 --> 08:41.680
De fapt, putem vedea avertizare aici, spune numele nedefinit.

08:41.720 --> 08:44.180
Și bine, asta pentru că aici folosim.

08:44.230 --> 08:46.030
Și apoi comanda rapidă.

08:46.350 --> 08:48.530
Și trebuie să folosim o scurtătură aici.

08:48.590 --> 08:52.780
Și pentru începerea torței noastre și în Mudgal și apoi va dispărea.

08:52.880 --> 08:53.670
Începem.

08:53.690 --> 08:54.580
Perfect.

08:54.590 --> 09:00.800
Chiar acum avem noi avertismente, toate avertismentele de aici sunt doar pentru a preciza că ceea ce importăm nu este

09:00.800 --> 09:01.520
încă folosit.

09:01.580 --> 09:04.660
În regulă, le vom folosi ulterior.

09:04.670 --> 09:10.010
În regulă avem două variante pe care vrem să le definim pentru obiect.

09:10.190 --> 09:15.820
Și aceasta va fi conexiunile complete între conexiunile complete dintre diferitele straturi ale rețelei

09:15.830 --> 09:16.810
noastre neuronale.

09:16.820 --> 09:21.800
Deci, de vreme ce acum vrem să construim o rețea neuronală compusă dintr-un singur cap în lumea lor,

09:21.800 --> 09:23.440
vor exista două conexiuni complete.

09:23.570 --> 09:27.740
Va exista o primă legătură completă între stratul de intrare și stratul ascuns.

09:27.980 --> 09:32.450
Și o conexiune completă de o jumătate între deal și stratul de ieșire.

09:32.480 --> 09:34.770
Deci, să începem cu prima conexiune completă.

09:34.890 --> 09:43.310
O vom numi SE1 Și din nou, eu folosesc eu aici pentru a preciza că FC unul este o variabilă a obiectului meu pentru a

09:43.780 --> 09:44.530
rezolva asta.

09:44.530 --> 09:47.490
FC unul care va fi egal cu.

09:47.630 --> 09:55.160
Și acum vom folosi modulul N în modul și vom folosi o funcție numită R liniar și aceasta este

09:55.160 --> 10:02.080
exact pentru a face această legătură completă între neuroni și stratul de intrare la neuronii ascunși acolo.

10:02.180 --> 10:04.090
Și ce vreau să spun prin conexiune completă.

10:04.160 --> 10:09.190
Asta înseamnă că toți neuronii stratului de intrare vor fi conectați la toți neuronii

10:09.190 --> 10:09.920
de aici.

10:10.190 --> 10:16.140
Și astfel, pentru a face această conexiune, folosim această funcție liniară la care trebuie să punem niște argumente.

10:16.190 --> 10:19.880
Și după cum puteți vedea aceste argumente sunt în trăsături.

10:19.880 --> 10:25.370
Deci, este numărul de neuroni din prima lege pe care doriți să îi conectați la caracteristici care reprezintă numărul de

10:25.370 --> 10:30.110
neuroni ai celui de-al doilea strat pe care doriți să îl conectați, acesta fiind stratul din dreapta

10:30.110 --> 10:32.360
care este stratul ascuns și bicicleta este adevărată.

10:32.420 --> 10:38.850
Așa că bicicleta este adevărată, vom păstra valoarea implicită care este pentru a avea o părtinire și nu doar o anumită greutate

10:38.900 --> 10:43.350
atașată runului pe care trebuie să îl așteptăm, și o bias pentru fiecare strat.

10:43.610 --> 10:46.140
Și așa bine să vedem ce trebuie să introducem.

10:46.280 --> 10:51.850
Deci, primul argument în caracteristici este numărul de neuroni de intrare din stratul de intrare.

10:52.000 --> 10:52.930
Și unde este?

10:53.030 --> 10:55.080
Ei bine, asta e de fapt imprecis.

10:55.100 --> 11:01.930
Acesta este argumentul funcției noastre init care mai târziu vom putea să luptăm cu orientarea celor trei semnale

11:02.200 --> 11:04.150
și orientarea lui Mannus.

11:04.160 --> 11:05.020
Deci, aici mergem.

11:05.190 --> 11:14.300
Atunci când primele argumente și a pune dimensiunea și apoi al doilea argument este out caracteristici care este faptul că este numărul de neuroni pe care

11:14.300 --> 11:17.090
dorim să avem în al doilea strat.

11:17.180 --> 11:20.450
Cel de-al doilea strat care va fi complet conectat la primul strat.

11:20.450 --> 11:24.960
Și acum întrebarea este cât de mulți neuroni vrem în acest strat ascuns.

11:25.220 --> 11:27.420
Ei bine am făcut o mulțime de pregătire parametrilor.

11:27.440 --> 11:29.110
Am făcut o mulțime de experimente.

11:29.210 --> 11:31.940
Asta facem sau asta facem mai adânc.

11:31.940 --> 11:38.270
În general, facem o mulțime de experimente pentru a vedea care ar fi cea mai bună rețea neuronală pentru problema

11:38.270 --> 11:39.170
noastră specifică.

11:39.170 --> 11:45.950
Și așa am încercat multe valori și am ajuns să aleg 30 de 30 de runde într-un strat ascuns și veți vedea că

11:45.950 --> 11:50.750
cu acest număr vom obține câteva rezultate destul de bune, dar apoi nu ezitați să schimbați arhitectura

11:50.750 --> 11:51.580
rețelei neuronale.

11:51.580 --> 11:53.120
Simțiți-vă liber să vă jucați cu ea.

11:53.180 --> 11:58.730
Puteți nu numai să modificați numărul de neuroni în loc și acolo, dar puteți adăuga și mai multe straturi, astfel

11:59.150 --> 12:05.000
că poate veți obține o mașină chiar mai bună, dar 30 neuroni hinna ne vor aduce o rețea neuronală bună și

12:05.000 --> 12:06.000
o cauză bună.

12:06.020 --> 12:07.390
Deci, pentru asta mergem.

12:07.520 --> 12:08.410
Și acolo mergem.

12:08.420 --> 12:13.500
Avem prima noastră legătură completă într-adevăr cu această funcție liniară.

12:13.520 --> 12:16.910
Facem conexiunea dintre stratul de intrare și piciorul ascuns.

12:17.360 --> 12:23.270
Și acum timpul pentru a face a doua conexiune completă, care este conexiunea completă între stratul ascuns

12:23.600 --> 12:25.180
și stratul de ieșire.

12:25.490 --> 12:26.750
Așa că mergem.

12:26.750 --> 12:31.380
Vom numi cea de-a doua conexiune completă la C2.

12:31.490 --> 12:32.280
Vom merge acolo.

12:32.360 --> 12:36.400
Și totuși acest lucru este disponibil pentru mai multe obiecte folosind Saphir.

12:36.650 --> 12:38.330
Și apoi vom folosi din nou.

12:38.450 --> 12:45.310
De fapt, putem copia acest lucru pentru că vom folosi modulul N în modul și apoi funcția liniară.

12:45.530 --> 12:49.250
Dar atunci trebuie să schimbăm mai întâi argumentele.

12:49.280 --> 12:55.050
Același lucru este primul număr de neuroni pe care îl vom avea în primul strat al conexiunii.

12:55.190 --> 12:56.510
Deci asta este ascuns acolo.

12:56.720 --> 13:03.810
Și, prin urmare, că este de 30 și apoi al doilea argument este numărul de neuroni în al doilea strat

13:04.010 --> 13:08.810
al conexiunii și care corespunde stratului de ieșire și de ieșire acolo.

13:08.980 --> 13:15.020
Iar neuronii reali, care mai târziu vor fi trei, pentru că avem trei acțiuni posibile, dar până acum trebuie să

13:15.020 --> 13:16.930
folosim denumirile pe care le-am definit.

13:17.050 --> 13:23.990
Acesta este numele argumentului funcției init și, prin urmare, introducem aici și acțiunea și acolo

13:23.990 --> 13:24.950
mergem.

13:24.950 --> 13:27.760
Mai întâi de toate conexiunile noastre tuple re.

13:27.920 --> 13:30.980
Și în al doilea rând, este orice funcție Israel.

13:31.400 --> 13:36.940
Deci, asta vom initializa obiectul ori de câte ori creem un obiect din clasa de rețea.

13:37.130 --> 13:44.300
Și astfel, de îndată ce vom crea un obiect bine toate aceste variabile pentru variabile aici dimensiunea de intrare și de reacție.

13:44.380 --> 13:46.980
Tu și doi veți fi definiți.

13:47.180 --> 13:52.060
Și așa vom obține arhitectura rețelei noastre de animale pentru fiecare obiect pe care îl creăm.

13:52.160 --> 13:59.450
Fiecare obiect va corespunde unei rețele neuronale cu cinci neuroni de intrare, 30 neuroni ascunși și trei neuroni

13:59.450 --> 14:00.440
de ieșire.

14:00.470 --> 14:01.430
Așa că mergem.

14:01.430 --> 14:06.980
Am terminat cu această primă funcție și acum putem trece la a doua funcție care este

14:06.980 --> 14:13.100
funcția forward și care va fi utilizată pentru a activa neuronii din rețeaua neurală folosind funcția de activare a

14:13.100 --> 14:19.500
redresorului și mai ales pentru a reveni în cele din urmă la valorile cubului care sunt ieșirile unei singure rețele.

14:19.580 --> 14:23.420
Așa că nu pot să aștept să fac acest lucru în tutorialul următor și până atunci eu.
