WEBVTT

00:00.180 --> 00:05.880
Hallo en welkom bij deze tutorial, nogmaals gefeliciteerd dat je klaar bent met de actrice die we hebben gemaakt, we hebben de

00:05.880 --> 00:07.980
hersenen gemaakt en we hebben ze getraind.

00:08.250 --> 00:14.520
Maar nu moeten we nog een testverklaring afleggen, die het model helemaal niet zal updaten, maar

00:14.520 --> 00:19.080
het deelmodel alleen zal gebruiken om zijn eigen verkenningen te doen.

00:19.320 --> 00:24.650
En natuurlijk zullen we in deze code enkele video's opnemen en dit zullen de video's zijn van deze

00:24.690 --> 00:27.510
testagent die breakout speelt met een bepaalde score.

00:28.680 --> 00:30.590
Dus laten we deze code eens doornemen.

00:30.750 --> 00:31.980
Het belangrijkste is gedaan.

00:31.980 --> 00:35.150
Dus, zoals ik je al zei, we gaan het niet regel voor regel coderen.

00:35.160 --> 00:38.230
Maar ik denk dat het belangrijk is dat je begrijpt wat hier aan de hand is.

00:38.670 --> 00:41.790
Dus daar gaan we met deze code in de eerste sectie.

00:41.790 --> 00:48.470
Zoals je hebt opgemerkt, importeren we de bibliotheken en definiëren we deze testfunctie, waardoor deze testagent

00:48.480 --> 00:51.940
zijn eigen verkenningstocht doet en het breakout-spel speelt.

00:52.470 --> 00:53.070
Dus daar gaan we.

00:53.070 --> 00:55.230
Deze testfunctie heeft drie argumenten.

00:55.230 --> 00:56.370
De eerste is de rangorde.

00:56.370 --> 01:01.710
Dat moet de testagent nog synchroniseren, zoals we dat voor de trainingsagenten hebben gedaan.

01:02.070 --> 01:04.890
Dan hebben we natuurlijk onze parameters, want die hebben we nodig.

01:05.220 --> 01:11.910
En natuurlijk hebben we het gedeelde model omdat deze testagent het gedeelde model zal gebruiken om zijn eigen verkenning

01:11.910 --> 01:12.870
te doen.

01:13.170 --> 01:16.580
Goed, dan gaan we naar de functie in deze regel code.

01:16.590 --> 01:22.830
We hebben gesynchroniseerd om de agent te testen, precies zoals we deden voordat we de omgeving importeerden.

01:23.010 --> 01:29.160
Dus ik herinner eraan dat in de hoofdcode, die goed in de volgende tutorial zal staan, en de naam hier zal

01:29.160 --> 01:34.830
worden vervangen door Breakout V0, zodat we naar de breakout V0-omgeving kunnen gaan en het spel kunnen spelen.

01:35.070 --> 01:39.840
En video is gelijk aan waar betekent dat we de video's van onze ap'tin-uitbraak zullen krijgen.

01:40.020 --> 01:46.190
Dus in feite betekent deze regel code in totaal dat we één omgeving met de video uitvoeren.

01:46.920 --> 01:50.850
Dan synchroniseren we bij de volgende regel code deze omgeving.

01:51.150 --> 01:53.900
Dus exact hetzelfde principe als in de trainingsfunctie.

01:54.540 --> 01:56.460
Dan krijgen we ons model.

01:56.640 --> 02:04.200
En om dit te doen, maken we een object van de activiteitsklasse en voeren we de invoervorm in met onze omgeving,

02:04.350 --> 02:06.330
observatie, ruimte en vorm nul.

02:06.330 --> 02:13.320
Dus precies zoals voor de trainingsfunctie en onze outputs, dat zijn de acties met een actieruimte.

02:13.770 --> 02:17.070
Dus precies zoals vroeger hier iets nieuws.

02:17.430 --> 02:23.400
Omdat we klaar zijn met de training, willen we het model niet in de treinmodus zetten omdat we gewoon niet willen

02:23.400 --> 02:24.360
dat het traint.

02:24.630 --> 02:26.670
We willen het in de evaluatiemodus zetten.

02:26.970 --> 02:29.190
En dat doen we hier met model that.

02:29.730 --> 02:36.930
Dus dat is eigenlijk gewoon om de testagenten in een modus te zetten die het in principe zal testen, de prestaties testen,

02:36.930 --> 02:37.740
het evalueren.

02:38.520 --> 02:45.480
Dan krijgen we hier onze invoerstatussen, dit zijn de invoerafbeeldingen van het spel, die op dit punt worden gedaan

02:45.480 --> 02:46.350
door RES.

02:46.680 --> 02:49.050
Dan zetten we ze hier om in toortssensoren.

02:49.350 --> 02:51.510
Hier initialiseren we enkele van de beloningen.

02:52.170 --> 02:54.680
Hier initialiseren we gedaan naar waar.

02:55.080 --> 02:58.800
Dus nog steeds net als de vorige keer, dan weer iets nieuws.

02:58.800 --> 03:05.520
We introduceren de starttijdvariabele met standaardtijdfunctie om de tijd van berekeningen te meten.

03:06.000 --> 03:11.790
En dat is omdat we het startpunt willen hebben. Hier voor de acties gebruiken we een zeer praktisch type

03:11.790 --> 03:16.440
cue waarmee we een element van rechts of van links aan de kubus kunnen toevoegen.

03:16.470 --> 03:17.700
Dat is dus heel praktisch.

03:17.700 --> 03:23.580
En ik zal je de referentielink geven in de gewijzigde versie van de code, zodat je kunt zien

03:23.760 --> 03:25.080
wat deze dequeue is.

03:25.080 --> 03:26.790
En dat is wat ons in staat stelt om dat te doen.

03:27.330 --> 03:33.450
Dan initialiseren we natuurlijk de lengte van een aflevering nul, en dan vergroten we de grootte in

03:33.450 --> 03:34.470
deze while-lus.

03:34.740 --> 03:36.270
Dus we gebruiken hier dezelfde truc.

03:36.450 --> 03:42.000
Hoewel waar en in de lus, verhogen we de lengte van de aflevering met één.

03:42.360 --> 03:49.290
Wanneer het spel klaar is, wanneer het spel voorbij is, herladen we de laatste set van het gedeelde model, het gedeelde model dat

03:49.290 --> 03:51.320
is bijgewerkt door de andere modellen.

03:51.330 --> 03:58.110
Onthoud dat hier het gedeelde model niet langer wordt bijgewerkt, maar als het spel voorbij is, als het spel

03:58.110 --> 04:00.120
klaar is, zitten we erin.

04:00.300 --> 04:07.380
We initialiseren de verkoopstatus C X en de verborgen status H, X en anders.

04:07.560 --> 04:14.640
Als het spel nog niet voorbij is, houden we dezelfde celstatus en verborgen status, maar we zorgen ervoor dat ze tahj variabel

04:14.640 --> 04:17.760
zijn, zodat ze aan een verloop kunnen worden gekoppeld.

04:18.070 --> 04:25.650
OK, dus dat hebben we al gedaan in de treinfunctie en dan nog steeds in de lus en na de celstatus te hebben bijgewerkt

04:26.010 --> 04:30.600
en de verborgen blijft op de juiste manier, afhankelijk van de twee gevallen hier.

04:30.870 --> 04:31.800
Wel, wat doen we?

04:31.800 --> 04:34.040
We krijgen de voorspellingen van het model.

04:34.410 --> 04:36.990
Dat is precies wat we hier doen met deze regel code.

04:37.620 --> 04:42.600
Dus we krijgen de waarde, wat de output is van de criticus, de actiewaarde, die de output is

04:42.600 --> 04:47.340
van de acteur, en dan de top van alle verborgen staten en de celstatus, zie X.

04:48.090 --> 04:53.970
Vervolgens genereren we een kansverdeling van de acties die hier bij de kernwaarden actiewaarde hoort.

04:54.090 --> 04:56.100
En dat doen we met de softmax-functie.

04:56.280 --> 05:01.110
En natuurlijk hoeven we de logboekwaarschijnlijkheden hier niet te krijgen, omdat dit alleen voor de training voor

05:01.380 --> 05:02.550
de testagent is.

05:02.550 --> 05:08.520
Het zal gewoon de acties spelen die we gewoon gebruiken, je weet wel, zoals de Dhoom softmax body om het te spelen.

05:08.730 --> 05:12.060
Maar we doen hier geen training, dus we hebben alleen de steun.

05:12.390 --> 05:18.960
En van hieruit spelen we de actie door direct de amax van deze kansen te nemen.

05:18.960 --> 05:22.350
Dat wil zeggen, het neemt de actie die de grootste kans heeft.

05:22.620 --> 05:26.370
En de reden is dat de testagent geen verkenning doet.

05:26.730 --> 05:28.170
Onthoud dat we dat willen.

05:28.270 --> 05:34.390
De kans om sommige acties op te pikken die een lage waarschijnlijkheid hebben wanneer we deze willen verkennen, zijn

05:34.390 --> 05:39.300
hun acties en, weet je, niet elke keer de actie ondernemen met de hoogste waarschijnlijkheid.

05:39.700 --> 05:42.130
Maar hier zal een testagent geen verkenning doen.

05:42.280 --> 05:46.610
En daarom ondernemen we direct de actie die de grootste kans heeft.

05:47.200 --> 05:54.400
OK, en als we de actie eenmaal hebben gespeeld, bereiken we de volgende fase en krijgen we de volgende beloning en wordt vervolgens bijgewerkt

05:54.400 --> 05:56.620
of het spel voorbij is of niet.

05:57.040 --> 06:03.430
Dus dit krijgen we allemaal met deze regel code door de actie te spelen nadat we deze hier met de Amax

06:03.430 --> 06:04.300
hebben geselecteerd.

06:04.690 --> 06:10.780
Dus we spelen de actie hier en we krijgen de status, we krijgen de beloning en wordt dan bijgewerkt.

06:11.320 --> 06:17.710
OK, en aangezien we net een nieuwe beloning hebben gekregen, gaan we een deel van de beloning bijwerken door simpelweg deze nieuwe beloning

06:17.710 --> 06:18.650
toe te voegen.

06:19.000 --> 06:25.750
En tot slot, wanneer het spel klaar is, dus als het klaar is, betekent dat wanneer het spel klaar is,

06:25.750 --> 06:32.950
wanneer het spel klaar is, nou, we gaan de resultaten afdrukken met de tijd dat de afleveringen de lengte van de aflevering

06:32.950 --> 06:33.550
belonen.

06:33.550 --> 06:36.820
Dat is hoeveel tijd het voor het laatst speelde met breakout.

06:37.270 --> 06:42.550
En dit is precies hoe we al deze variabelen afdrukken met behulp van deze tijdtrucs.

06:42.850 --> 06:43.630
Dat is voor de tijd.

06:43.920 --> 06:45.040
Beloon dan wat.

06:45.040 --> 06:47.110
Het is gewoon een variabele voor de som van de beloningen.

06:47.110 --> 06:50.280
En de afleveringslengte is de variabele voor de lengte van een aflevering.

06:51.050 --> 06:57.170
OK, en als we dan alle resultaten hebben afgedrukt, nou, aangezien het spel voorbij is en we een nieuw spel willen beginnen,

06:57.170 --> 07:02.840
gaan we alles wat de som van de oorlog is opnieuw initialiseren om de lengte van een aflevering op nul

07:02.840 --> 07:03.730
te zetten .

07:04.040 --> 07:09.890
We gaan alle acties opnieuw uitvoeren door deze duidelijke functie te gebruiken, de invoerbeelden resetten, weet

07:09.890 --> 07:13.120
je, door alle pauzes allemaal samen te herhalen.

07:13.400 --> 07:21.320
En tot slot, we gebruiken deze tijd die zestig seconden slaapt om een minuut pauze te nemen om de andere agenten te

07:21.320 --> 07:28.790
laten oefenen en dat als het spel voorbij is, oké, en tot slot hebben we deze laatste regel code die ons

07:29.000 --> 07:32.150
de nieuwe fase en dan kunnen we verder.

07:32.150 --> 07:33.810
We kunnen doorgaan in dit nieuwe spel.

07:34.430 --> 07:35.680
Dus daar gaan we.

07:35.720 --> 07:40.190
Dat is de testfunctie, dingen waarvan we de video's in een of twee tutorials zullen zien.

07:40.370 --> 07:43.880
Ik hoop dat het allemaal bij elkaar zal zijn zoals de vorige keer om de resultaten te bekijken.

07:43.880 --> 07:46.040
Dat is met jou en mij.

07:46.250 --> 07:47.180
Dat wordt leuk.

07:47.300 --> 07:50.210
En ik zeg je, verwacht goede resultaten te zien.

07:50.210 --> 07:54.610
Maar houd er rekening mee dat deze breakout-game super uitdagend was.

07:54.980 --> 07:58.280
We dachten dat het de eenvoudigste game was om als eerste te spelen, maar dat was helemaal niet zo.

07:58.280 --> 08:03.580
Het bleek eigenlijk veel moeilijker dan doom, en daarom hebben we het in de laatste module gezet.

08:04.010 --> 08:09.260
Maar goed, laten we deze hoofdfunctie in de volgende tutorial maken.

08:09.470 --> 08:14.240
Hetzelfde is hier niet het belangrijkste nu de drie C's zijn geïmplementeerd.

08:14.540 --> 08:17.180
We zullen het dus niet regel voor regel coderen en de code uitbreiden.

08:17.390 --> 08:20.090
En heel snel komen we bij de resultaten.

08:20.390 --> 08:21.980
Tot die tijd, geniet van I.
