WEBVTT

00:00.360 --> 00:02.430
Hallo en welkom bij deze Python-tutorial.

00:02.700 --> 00:05.260
Oké, dus we hebben heel spannende tutorials voor de boeg.

00:05.550 --> 00:08.670
We beginnen met het maken van de architectuur van het neurale netwerk.

00:08.940 --> 00:14.520
Dat wil zeggen, we zullen het neurale netwerk maken dat in het hart van ons oog zal zijn en dat de actie

00:14.520 --> 00:16.230
op elk moment zal laten spelen.

00:16.890 --> 00:17.810
Dus laten we dit doen.

00:18.000 --> 00:22.800
Dus omdat we willen dat ons neurale netwerk een object is, gaan we een klasse maken.

00:23.010 --> 00:25.010
En dat is omdat het veel handiger is.

00:25.020 --> 00:28.140
Weet je, de klas is het model van iets dat we willen bouwen.

00:28.410 --> 00:33.960
We willen een neuraal netwerk bouwen en we moeten een soort instructies maken die allemaal in een klas

00:33.960 --> 00:34.620
zullen zitten.

00:34.950 --> 00:37.580
En in deze les gaan we twee functies maken.

00:37.800 --> 00:43.050
Ten eerste de init-functie, de functie die altijd naar voren komt bij het maken van een klasse

00:43.050 --> 00:46.500
en die in feite de variabele van je object definieert.

00:46.510 --> 00:51.630
Dat is het neurale netwerk, je weet wel, de variabelen die aan het object zijn gekoppeld, in tegenstelling tot de

00:51.630 --> 00:52.190
globale variabelen.

00:52.650 --> 00:57.710
En dit is dus in deze init-functie die de architectuur zal definiëren van het neurale

00:57.720 --> 01:03.150
netwerk gedefinieerd in de invoerlaag, die zal bestaan uit vijf invoerneuronen omdat we vijf dimensies hebben

01:03.150 --> 01:07.830
voor de gecodeerde vector van invoerstatus, dan zullen we enkele verborgen lagen.

01:07.950 --> 01:12.870
Misschien beginnen we met één verborgen laag en dan ben je welkom om enkele andere architecturen van het neurale

01:12.870 --> 01:13.730
netwerk te proberen.

01:14.010 --> 01:20.040
En dan komen we natuurlijk uit bij de uitvoerlaag die de mogelijke acties bevat die we op

01:20.040 --> 01:21.610
elk moment kunnen spelen.

01:22.050 --> 01:24.420
Dus dat is precies wat we in deze functie gaan doen.

01:24.690 --> 01:29.700
En dan zullen we nog een functie maken binnen de klas, die de voorwaartse functie zal

01:30.000 --> 01:35.220
zijn, en dat zal de functie zijn die de neuronen in het neurale netwerk zal activeren, weet

01:35.220 --> 01:37.280
je, die de signalen zal activeren.

01:37.290 --> 01:42.600
En dus zullen we een gelijkrichteractiveringsfunctie gebruiken omdat we natuurlijk te maken hebben met

01:42.600 --> 01:46.500
een puur niet-lineair probleem en deze gelijkrichterfunctie de lineariteit verbreekt.

01:47.070 --> 01:52.440
Maar meestal maken we deze voorwaartse functie om de kernwaarden te retourneren, die de outputs van het netwerk

01:52.620 --> 01:53.130
zijn.

01:53.350 --> 01:55.830
Maar we hebben één sleutelwaarde voor elke actie.

01:56.010 --> 02:02.640
En later zullen we de laatste actie retourneren door ofwel de volgende van de sleutelwaarden te nemen of een

02:02.640 --> 02:03.690
softmax-methode te gebruiken.

02:03.900 --> 02:04.980
Dat zullen we daarna zien.

02:05.310 --> 02:10.110
Dus in deze zelfstudie beginnen we met het implementeren van de Init-functie en vervolgens zullen we de

02:10.110 --> 02:12.130
volgende functie de voorwaartse functie implementeren.

02:12.750 --> 02:14.340
Laten we dit dus eerst doen.

02:14.340 --> 02:16.820
We moeten onze klas voorstellen.

02:17.070 --> 02:22.530
Dus we beginnen met de klas en we geven een naam aan onze klas, wat goed is, we kunnen het netwerk noemen.

02:23.460 --> 02:29.130
En dan en deze netwerkklasse, ik ga een objectprogrammeertechniek gebruiken, die overerving wordt genoemd, en

02:29.130 --> 02:34.770
dat is gewoon om te erven van alle tools van een bovenliggende klasse.

02:35.070 --> 02:42.810
Dus onze netwerkklas die we gaan maken, is een kindtest van een grotere klas, namelijk die

02:43.050 --> 02:43.730
module.

02:44.310 --> 02:50.160
Dus dat is gewoon om te erven van alle tools van deze moduleklasse, die natuurlijk de tools zijn om een

02:50.160 --> 02:51.470
neuraal netwerk te implementeren.

02:51.780 --> 02:57.730
Dus dat is een zeer krachtige en Africentrische en objectgeoriënteerde programmering die overerving wordt genoemd.

02:57.750 --> 03:02.110
En op dit moment erven we van deze module-ouderklasse.

03:02.610 --> 03:03.120
Oke.

03:03.420 --> 03:05.760
En nu zijn we klaar om de klas in te gaan.

03:06.000 --> 03:12.000
Dus ik druk eigenlijk twee keer op enter, omdat we twee functies gaan maken en we beginnen

03:12.360 --> 03:13.800
met de init-functie.

03:14.220 --> 03:20.130
Dus de functie moeten we zo noemen met twee op deze cursus, dan erin.

03:20.460 --> 03:23.850
En nogmaals, om te onderstrepen, dat is gewoon de Python-syntaxis.

03:24.090 --> 03:25.410
Dat is precies hoe we het moeten doen.

03:25.710 --> 03:28.140
En dan moeten we de argumenten aandragen.

03:28.590 --> 03:29.970
We hebben dus drie argumenten.

03:30.210 --> 03:35.690
De eerste is een verplicht argument dat eigenlijk zelf en zelf is.

03:35.700 --> 03:36.900
Er is geen mysterie aan.

03:37.260 --> 03:42.750
Dat verwijst naar het object dat wordt gemaakt van deze klasse die we gaan maken.

03:42.750 --> 03:44.160
Weet je, we maken deze les.

03:44.310 --> 03:48.750
Het is als een instructie, een model van dit neurale netwerk dat we willen bouwen.

03:49.020 --> 03:53.220
En als de klas klaar is, kunnen we zoveel neurale netwerken maken als we willen.

03:53.430 --> 03:57.270
En elk van deze neurale netwerken zal een object van deze klasse zijn.

03:57.660 --> 04:04.830
En aangezien we het object voor een aantal andere doeleinden zullen gebruiken, moeten we zien wat de variabelen van

04:04.830 --> 04:06.810
het object in Spudis zijn.

04:06.840 --> 04:11.640
We gebruiken dit zelf hier om aan te geven dat we naar het object verwijzen.

04:11.940 --> 04:18.180
Dus wanneer ik een variabele van mijn object wil gebruiken, zal ik self vóór de variabele gebruiken om aan te geven dat dit

04:18.180 --> 04:20.160
een variabele van het object is.

04:21.150 --> 04:21.510
Oke.

04:21.510 --> 04:22.800
Dus dat is het eerste argument.

04:22.800 --> 04:28.470
En dan hebben we nog twee andere argumenten, die natuurlijk het aantal inputneuronen en het

04:28.470 --> 04:29.910
aantal outputneuronen zijn.

04:30.390 --> 04:33.990
Dus het aantal inputneuronen, we gaan het inputgrootte noemen.

04:35.460 --> 04:42.750
En dat zijn eigenlijk vijf, omdat onze invoervectoren vijf dimensies hebben, de drie signalen plus

04:42.900 --> 04:50.750
oriëntatie plus minus oriëntatie die vectoren zijn van gecodeerde waarden die één toestand van de omgeving beschrijven.

04:51.090 --> 04:54.690
Deze vijf waarden zijn voldoende om de toestand van het milieu te beschrijven.

04:54.780 --> 04:59.420
We hadden aan minder waarden of meer waarden kunnen denken, maar dat heb ik geprobeerd.

04:59.430 --> 05:04.410
En het is eigenlijk logisch omdat we eigenlijk één signaal van links nodig hebben, één voor ons en

05:04.410 --> 05:05.070
één rechts.

05:05.340 --> 05:09.870
Weet je, toen we in een auto reden, hadden we voor drie zestig signalen kunnen gaan, weet

05:09.870 --> 05:11.940
je, zoals de signalen bovenaan de Google-auto's.

05:12.150 --> 05:15.360
Maar we kunnen helemaal zelf rijden met drie sensoren.

05:15.810 --> 05:21.000
En dan hebben we deze oriëntatie en min oriëntatie om, je weet wel, het doel bij te houden dat we

05:21.000 --> 05:21.830
probeerden te bereiken.

05:22.350 --> 05:28.560
En dan hebben we natuurlijk de outputneuronen van ons neurale netwerk die overeenkomen met de acties.

05:28.740 --> 05:33.870
En we hebben drie mogelijke acties die naar links gaan, naar rechts gaan, naar rechts gaan, en

05:33.870 --> 05:37.570
daarom noem ik het actie en het zullen er drie zijn.

05:38.340 --> 05:38.700
Oke.

05:38.700 --> 05:44.790
Maar tot nu toe hoeven we alleen namen te geven aan de invoer en dan zullen we deze variabelen gebruiken om de berekeningen binnen het neurale

05:44.790 --> 05:45.980
netwerk uit te voeren.

05:46.900 --> 05:54.130
Goed dan, ik ga beginnen met een andere Pittodrie-truc, deze truc is de superfunctie.

05:54.550 --> 05:59.000
Dat is een functie die feitelijk van de motormodule erft.

05:59.230 --> 06:02.390
Daarom moesten we overerving gebruiken om de moduletool te erven.

06:02.620 --> 06:04.090
Dit zijn de eerste twee die we gebruiken.

06:04.330 --> 06:10.450
En dus gebruiken we eigenlijk alleen deze supertruc, de superfunctie, om de tools van module te kunnen

06:10.450 --> 06:11.080
gebruiken.

06:11.330 --> 06:14.850
Dus dat is veel efficiënter en binnen de superfunctie.

06:14.860 --> 06:22.450
Ik moet eerst het netwerk specificeren, zodat onze netwerkklasse, weet je, want dit erft van

06:22.450 --> 06:31.450
de module-ouderklasse en dan ons object en dan voeg ik dat gewoon toe en werk ik erin, precies

06:32.050 --> 06:34.810
zoals we het noemden .

06:35.380 --> 06:35.760
Oke.

06:35.770 --> 06:36.760
Dus dat is maar een truc.

06:37.000 --> 06:39.010
Dat is gewoon om alle tools te gebruiken.

06:39.020 --> 06:45.940
En in die module kunnen we doorgaan naar de volgende stap, namelijk het specificeren van de invoerlaag.

06:46.420 --> 06:53.050
Dus eigenlijk moet ik een nieuwe variabele introduceren die aan het object wordt gekoppeld en

06:53.050 --> 06:56.790
deze variabele zal het aantal inputneuronen bevatten.

06:57.040 --> 07:05.440
Dus niet te verwarren met invoer, grootte, invoergrootte is het argument van de Init-functie, maar dat is niet de variabele die aan het

07:05.440 --> 07:10.070
object is gekoppeld, maar de variabele die aan het object is gekoppeld.

07:10.390 --> 07:15.190
Welnu, zoals ik zojuist al zei, we moeten specificeren dat het in plaats daarvan aan het object is gekoppeld.

07:15.200 --> 07:21.870
Dus we gebruiken een zelf dat en nu geven we een naam aan deze eerste variabele die aan het object is gekoppeld.

07:22.000 --> 07:24.740
En dus kunnen we gewoon dezelfde naam geven als de invoer.

07:24.760 --> 07:26.260
We kunnen het invoergrootte noemen.

07:27.160 --> 07:32.760
En we zullen zeggen dat het gelijk is aan de argumenten van de functie die de invoergrootte is.

07:33.490 --> 07:33.870
Oke.

07:33.880 --> 07:39.310
Dus elke keer dat ik een object uit de netwerkklasse maak en ik de invoergrootte

07:39.310 --> 07:45.010
specificeer, zoals ik bijvoorbeeld vijf invoer, zal er hier een vijf zijn en daarom zal de invoergroottevariabele

07:45.010 --> 07:51.250
van ons object hebben de waarde van vijf omdat deze invoergrootte hier vijf zal zijn en daarom zal

07:51.260 --> 07:54.670
ons nieuwe netwerk vijf invoerneuronen in de invoerlaag hebben.

07:55.330 --> 07:55.720
Oke.

07:55.720 --> 08:01.930
En dan is dat hetzelfde voor de andere variabele die we aan ons object willen koppelen.

08:02.050 --> 08:08.380
En zoals je misschien al geraden had, wordt dit een variabele voor het aantal output-neuronen en om te zeggen

08:08.380 --> 08:15.040
dat we ons object zelf nemen en dan geven we een naam aan deze tweede variabele van het object, we

08:15.040 --> 08:17.380
gaan het noemen en de actie.

08:18.010 --> 08:23.530
En dit zal gelijk zijn aan dit argument hier, gezien het aantal acties, dat is het aantal

08:23.530 --> 08:23.980
outputneuronen.

08:24.370 --> 08:27.850
En dus stellen we het gelijk aan en de actie.

08:28.270 --> 08:30.390
Dus eigenlijk en de actie zal gelijk zijn aan drie.

08:30.730 --> 08:37.290
Daarom krijgen de variabele en de actie die aan ons object aan een netwerk is gekoppeld, de waarde drie.

08:38.050 --> 08:39.550
Eigenlijk kunnen we er hier een zien.

08:39.640 --> 08:41.590
Er staat een ongedefinieerde naam.

08:41.590 --> 08:48.250
En dan, nou, dat is omdat we hier de snelkoppeling en dan gebruiken en we moeten de snelkoppeling hier en

08:48.400 --> 08:52.540
gebruiken voor onze richting en einde-module en dan zal het verdwijnen.

08:52.750 --> 08:53.320
Daar gaan we.

08:53.500 --> 08:54.090
Perfect.

08:54.460 --> 08:55.660
Op dit moment hebben we geen waarschuwingen.

08:55.870 --> 09:01.420
Alle waarschuwingen hier zijn alleen om aan te geven dat wat we importeren nog niet wordt gebruikt.

09:01.420 --> 09:02.040
Maar dat is oke.

09:02.050 --> 09:03.730
Die gaan we later gebruiken.

09:04.480 --> 09:09.610
Oké, dan hebben we nog twee variabelen die we willen definiëren voor object.

09:10.000 --> 09:15.790
En dit zullen de volledige verbindingen zijn, de volledige verbindingen tussen de verschillende lagen van ons neurale

09:15.790 --> 09:16.210
netwerk.

09:16.690 --> 09:21.580
Dus aangezien we nu een neuraal netwerk willen maken dat uit slechts één verborgen laagwereld bestaat, zullen

09:21.580 --> 09:23.200
er twee volledige verbindingen zijn.

09:23.380 --> 09:28.750
Er zal een eerste volledige verbinding zijn tussen de invoerlaag en de verborgen laag en een

09:28.750 --> 09:31.990
tweede volledige verbinding tussen de Hillaire en de uitvoerlaag.

09:32.350 --> 09:35.590
Dus laten we beginnen met de eerste volledige verbinding die we het gaan noemen.

09:37.010 --> 09:44.390
Eenenveertig en nogmaals, ik gebruik hier self om aan te geven dat FS1 een variabele is van mijn object, dus self dat

09:44.390 --> 09:44.990
FS1.

09:45.890 --> 09:53.660
Dat zal gelijk zijn aan en nu gebruiken we de end in module en we gaan een functie gebruiken genaamd lineI, en dat

09:54.140 --> 10:00.530
is precies om deze volledige verbinding te maken tussen de neuronen van de invoerlaag naar de neuronen van de

10:00.530 --> 10:01.400
verborgen laag.

10:01.970 --> 10:03.740
En wat bedoel ik met volledige verbinding?

10:04.010 --> 10:09.200
Dat betekent dat alle neuronen van de invoerlaag allemaal verbonden zullen zijn met alle neuronen van de verborgen

10:09.200 --> 10:09.550
laag.

10:10.010 --> 10:15.920
En om deze volledige verbinding te maken, gebruiken we deze lineaire functie waaraan we enkele argumenten moeten invoeren.

10:16.010 --> 10:19.560
En zoals je kunt zien, zitten deze argumenten in functies.

10:19.730 --> 10:25.220
Dus dat is het aantal neuronen van de first lady dat we willen verbinden, dan de outfitters, dat is

10:25.220 --> 10:28.430
het aantal neuronen van de tweede laag dat we willen verbinden.

10:28.430 --> 10:33.400
Dat is de laag rechts die de verborgen laag is en biopsychosociaal door de fiets door.

10:33.560 --> 10:37.460
We zullen de standaardwaarde behouden om een vooroordeel te hebben.

10:37.700 --> 10:42.920
En niet alleen enkele gewichten die aan de neuronen zijn bevestigd, zullen moeten wachten en één vooroordeel voor elke laag.

10:43.430 --> 10:45.900
En dus, nou, laten we eens kijken wat we moeten invoeren.

10:46.110 --> 10:51.540
Het eerste argument in features is dus het aantal inputneuronen in de inputlaag.

10:51.800 --> 10:52.640
En wat is het dan?

10:52.850 --> 10:54.610
Dat is eigenlijk de invoergrootte.

10:54.950 --> 11:01.880
Dat is het argument van onze init-functie, die later gelijk zal zijn aan vijf van de drie signalen oriëntatie

11:02.060 --> 11:03.210
en minus oriëntatie.

11:04.010 --> 11:04.730
Hier gaan we.

11:05.000 --> 11:08.570
We voeren het eerste argument in, de invoergrootte.

11:09.710 --> 11:15.650
En dan gaat het tweede argument over kenmerken, dat wil zeggen het aantal neuronen dat we in de tweede laag

11:15.650 --> 11:19.880
willen hebben, de tweede laag die volledig verbonden zal zijn met de eerste laag.

11:20.270 --> 11:24.590
En nu is de vraag, hoeveel neuronen willen we in deze verborgen laag?

11:25.070 --> 11:27.350
Ik heb veel Piramida-training gedaan.

11:27.350 --> 11:28.700
Ik heb veel geëxperimenteerd.

11:29.040 --> 11:30.680
Dat is wat we doen in Iowa.

11:30.710 --> 11:31.880
Dat is wat we doen bij deep learning.

11:31.880 --> 11:32.440
In het algemeen.

11:32.690 --> 11:38.610
We experimenteren veel om te zien wat het beste neurale netwerk is voor ons specifieke probleem.

11:38.990 --> 11:44.840
En dus probeerde ik veel waarden en uiteindelijk koos ik 30, 30 neuronen in een verborgen laag.

11:44.990 --> 11:48.130
En je zult zien dat we met dit aantal behoorlijk goede resultaten zullen behalen.

11:48.140 --> 11:51.500
Maar voel je vrij om de architectuur van het neurale netwerk te veranderen.

11:51.530 --> 11:52.620
Speel er gerust mee.

11:53.030 --> 11:57.890
Je kunt niet alleen het aantal verborgen neuronen in een verborgen laag veranderen, maar je kunt ook wat meer

11:58.010 --> 12:00.920
lagen toevoegen zodat je misschien een nog betere auto krijgt.

12:01.190 --> 12:05.460
Maar 30 miljoen neuronen zullen ons een goed neuraal netwerk en een goede auto bezorgen.

12:05.900 --> 12:07.160
Dus daar gaan we voor.

12:07.320 --> 12:08.320
En daar gaan we.

12:08.330 --> 12:13.120
We hebben onze eerste volledige verbinding echt met deze lineaire functie.

12:13.370 --> 12:16.420
We maken de volledige verbinding tussen de invoerlaag en het verborgene.

12:17.150 --> 12:22.850
En nu is het tijd om de tweede volledige verbinding te maken, dat is de volledige verbinding tussen

12:22.850 --> 12:24.830
de verborgen laag en de uitvoerlaag.

12:25.340 --> 12:26.080
Dus daar gaan we.

12:26.570 --> 12:32.030
We gaan deze tweede volledige verbinding F noemen. C. daar gaan we.

12:32.150 --> 12:34.870
En toch, dit is een variabele van ons object.

12:34.890 --> 12:36.050
Dus ik gebruik hier dingen.

12:36.470 --> 12:42.320
En nogmaals, we gebruiken het, eigenlijk kunnen we dit kopiëren omdat we de Enon-module gaan gebruiken

12:42.620 --> 12:47.180
en dan de lineaire functie, maar dan moeten we de argumenten veranderen.

12:47.180 --> 12:48.830
Natuurlijk eerst.

12:49.130 --> 12:49.790
Dat is hetzelfde.

12:49.790 --> 12:54.810
De eerste is het aantal neuronen dat we in de eerste laag van de volledige verbinding willen hebben.

12:55.040 --> 12:58.750
Dus dat is de verborgen laag en daarom is dat 30.

12:59.420 --> 13:05.090
En dan is het tweede argument het aantal neuronen in de tweede laag van de volledige verbinding,

13:05.090 --> 13:11.450
en dat komt overeen met de outputlaag en de outputlaag heeft en de actieneuronen, die later drie zullen zijn

13:11.450 --> 13:13.580
omdat we drie mogelijke acties hebben.

13:14.000 --> 13:16.550
Maar tot nu toe moeten we de namen gebruiken die we hebben gedefinieerd.

13:16.940 --> 13:23.030
Dat zijn de namen van het argument van de Init-functie en daarom voeren we hier en de actie in.

13:23.630 --> 13:24.530
En daar gaan we.

13:24.740 --> 13:30.710
Allereerst zijn twee volledige verbindingen gereed en ten tweede is de init-functie gereed.

13:31.280 --> 13:36.610
Dus dat is wat ons object zal initialiseren wanneer we een object van de netwerkklasse maken.

13:36.950 --> 13:42.680
En dus zodra we een object maken, nou ja, al deze variabelen, de vier variabelen hier,

13:42.680 --> 13:46.790
de invoergrootte en de actie X1 en X2 zullen worden gedefinieerd.

13:46.970 --> 13:50.060
En zo krijgen we de architectuur van ons neurale netwerk.

13:50.180 --> 13:56.210
Voor elk object dat we maken, komt elk object overeen met een neuraal netwerk, vijf

13:56.390 --> 13:59.790
inputneuronen, dertig verborgen neuronen en drie outputneuronen.

14:00.320 --> 14:01.130
Dus daar gaan we.

14:01.250 --> 14:06.470
We zijn klaar met deze eerste functie en nu kunnen we verder gaan met de tweede

14:06.470 --> 14:12.440
functie, de voorwaartse functie, en die zal worden gebruikt om de neuronen in het neurale netwerk te activeren met behulp

14:12.440 --> 14:18.560
van de gelijkrichteractiveringsfunctie en meestal om uiteindelijk de kern terug te geven. waarden, die de output zijn van ons neurale

14:18.560 --> 14:18.990
netwerk.

14:19.460 --> 14:23.390
Dus ik kan niet wachten om dit in de volgende tutorial te doen en tot die tijd, geniet van I.
