Hallo en welkom bij deze tutorial, nogmaals gefeliciteerd dat je klaar bent met de actrice die we hebben gemaakt, we hebben de
hersenen gemaakt en we hebben ze getraind.
Maar nu moeten we nog een testverklaring afleggen, die het model helemaal niet zal updaten, maar
het deelmodel alleen zal gebruiken om zijn eigen verkenningen te doen.
En natuurlijk zullen we in deze code enkele video's opnemen en dit zullen de video's zijn van deze
testagent die breakout speelt met een bepaalde score.
Dus laten we deze code eens doornemen.
Het belangrijkste is gedaan.
Dus, zoals ik je al zei, we gaan het niet regel voor regel coderen.
Maar ik denk dat het belangrijk is dat je begrijpt wat hier aan de hand is.
Dus daar gaan we met deze code in de eerste sectie.
Zoals je hebt opgemerkt, importeren we de bibliotheken en definiëren we deze testfunctie, waardoor deze testagent
zijn eigen verkenningstocht doet en het breakout-spel speelt.
Dus daar gaan we.
Deze testfunctie heeft drie argumenten.
De eerste is de rangorde.
Dat moet de testagent nog synchroniseren, zoals we dat voor de trainingsagenten hebben gedaan.
Dan hebben we natuurlijk onze parameters, want die hebben we nodig.
En natuurlijk hebben we het gedeelde model omdat deze testagent het gedeelde model zal gebruiken om zijn eigen verkenning
te doen.
Goed, dan gaan we naar de functie in deze regel code.
We hebben gesynchroniseerd om de agent te testen, precies zoals we deden voordat we de omgeving importeerden.
Dus ik herinner eraan dat in de hoofdcode, die goed in de volgende tutorial zal staan, en de naam hier zal
worden vervangen door Breakout V0, zodat we naar de breakout V0-omgeving kunnen gaan en het spel kunnen spelen.
En video is gelijk aan waar betekent dat we de video's van onze ap'tin-uitbraak zullen krijgen.
Dus in feite betekent deze regel code in totaal dat we één omgeving met de video uitvoeren.
Dan synchroniseren we bij de volgende regel code deze omgeving.
Dus exact hetzelfde principe als in de trainingsfunctie.
Dan krijgen we ons model.
En om dit te doen, maken we een object van de activiteitsklasse en voeren we de invoervorm in met onze omgeving,
observatie, ruimte en vorm nul.
Dus precies zoals voor de trainingsfunctie en onze outputs, dat zijn de acties met een actieruimte.
Dus precies zoals vroeger hier iets nieuws.
Omdat we klaar zijn met de training, willen we het model niet in de treinmodus zetten omdat we gewoon niet willen
dat het traint.
We willen het in de evaluatiemodus zetten.
En dat doen we hier met model that.
Dus dat is eigenlijk gewoon om de testagenten in een modus te zetten die het in principe zal testen, de prestaties testen,
het evalueren.
Dan krijgen we hier onze invoerstatussen, dit zijn de invoerafbeeldingen van het spel, die op dit punt worden gedaan
door RES.
Dan zetten we ze hier om in toortssensoren.
Hier initialiseren we enkele van de beloningen.
Hier initialiseren we gedaan naar waar.
Dus nog steeds net als de vorige keer, dan weer iets nieuws.
We introduceren de starttijdvariabele met standaardtijdfunctie om de tijd van berekeningen te meten.
En dat is omdat we het startpunt willen hebben. Hier voor de acties gebruiken we een zeer praktisch type
cue waarmee we een element van rechts of van links aan de kubus kunnen toevoegen.
Dat is dus heel praktisch.
En ik zal je de referentielink geven in de gewijzigde versie van de code, zodat je kunt zien
wat deze dequeue is.
En dat is wat ons in staat stelt om dat te doen.
Dan initialiseren we natuurlijk de lengte van een aflevering nul, en dan vergroten we de grootte in
deze while-lus.
Dus we gebruiken hier dezelfde truc.
Hoewel waar en in de lus, verhogen we de lengte van de aflevering met één.
Wanneer het spel klaar is, wanneer het spel voorbij is, herladen we de laatste set van het gedeelde model, het gedeelde model dat
is bijgewerkt door de andere modellen.
Onthoud dat hier het gedeelde model niet langer wordt bijgewerkt, maar als het spel voorbij is, als het spel
klaar is, zitten we erin.
We initialiseren de verkoopstatus C X en de verborgen status H, X en anders.
Als het spel nog niet voorbij is, houden we dezelfde celstatus en verborgen status, maar we zorgen ervoor dat ze tahj variabel
zijn, zodat ze aan een verloop kunnen worden gekoppeld.
OK, dus dat hebben we al gedaan in de treinfunctie en dan nog steeds in de lus en na de celstatus te hebben bijgewerkt
en de verborgen blijft op de juiste manier, afhankelijk van de twee gevallen hier.
Wel, wat doen we?
We krijgen de voorspellingen van het model.
Dat is precies wat we hier doen met deze regel code.
Dus we krijgen de waarde, wat de output is van de criticus, de actiewaarde, die de output is
van de acteur, en dan de top van alle verborgen staten en de celstatus, zie X.
Vervolgens genereren we een kansverdeling van de acties die hier bij de kernwaarden actiewaarde hoort.
En dat doen we met de softmax-functie.
En natuurlijk hoeven we de logboekwaarschijnlijkheden hier niet te krijgen, omdat dit alleen voor de training voor
de testagent is.
Het zal gewoon de acties spelen die we gewoon gebruiken, je weet wel, zoals de Dhoom softmax body om het te spelen.
Maar we doen hier geen training, dus we hebben alleen de steun.
En van hieruit spelen we de actie door direct de amax van deze kansen te nemen.
Dat wil zeggen, het neemt de actie die de grootste kans heeft.
En de reden is dat de testagent geen verkenning doet.
Onthoud dat we dat willen.
De kans om sommige acties op te pikken die een lage waarschijnlijkheid hebben wanneer we deze willen verkennen, zijn
hun acties en, weet je, niet elke keer de actie ondernemen met de hoogste waarschijnlijkheid.
Maar hier zal een testagent geen verkenning doen.
En daarom ondernemen we direct de actie die de grootste kans heeft.
OK, en als we de actie eenmaal hebben gespeeld, bereiken we de volgende fase en krijgen we de volgende beloning en wordt vervolgens bijgewerkt
of het spel voorbij is of niet.
Dus dit krijgen we allemaal met deze regel code door de actie te spelen nadat we deze hier met de Amax
hebben geselecteerd.
Dus we spelen de actie hier en we krijgen de status, we krijgen de beloning en wordt dan bijgewerkt.
OK, en aangezien we net een nieuwe beloning hebben gekregen, gaan we een deel van de beloning bijwerken door simpelweg deze nieuwe beloning
toe te voegen.
En tot slot, wanneer het spel klaar is, dus als het klaar is, betekent dat wanneer het spel klaar is,
wanneer het spel klaar is, nou, we gaan de resultaten afdrukken met de tijd dat de afleveringen de lengte van de aflevering
belonen.
Dat is hoeveel tijd het voor het laatst speelde met breakout.
En dit is precies hoe we al deze variabelen afdrukken met behulp van deze tijdtrucs.
Dat is voor de tijd.
Beloon dan wat.
Het is gewoon een variabele voor de som van de beloningen.
En de afleveringslengte is de variabele voor de lengte van een aflevering.
OK, en als we dan alle resultaten hebben afgedrukt, nou, aangezien het spel voorbij is en we een nieuw spel willen beginnen,
gaan we alles wat de som van de oorlog is opnieuw initialiseren om de lengte van een aflevering op nul
te zetten .
We gaan alle acties opnieuw uitvoeren door deze duidelijke functie te gebruiken, de invoerbeelden resetten, weet
je, door alle pauzes allemaal samen te herhalen.
En tot slot, we gebruiken deze tijd die zestig seconden slaapt om een minuut pauze te nemen om de andere agenten te
laten oefenen en dat als het spel voorbij is, oké, en tot slot hebben we deze laatste regel code die ons
de nieuwe fase en dan kunnen we verder.
We kunnen doorgaan in dit nieuwe spel.
Dus daar gaan we.
Dat is de testfunctie, dingen waarvan we de video's in een of twee tutorials zullen zien.
Ik hoop dat het allemaal bij elkaar zal zijn zoals de vorige keer om de resultaten te bekijken.
Dat is met jou en mij.
Dat wordt leuk.
En ik zeg je, verwacht goede resultaten te zien.
Maar houd er rekening mee dat deze breakout-game super uitdagend was.
We dachten dat het de eenvoudigste game was om als eerste te spelen, maar dat was helemaal niet zo.
Het bleek eigenlijk veel moeilijker dan doom, en daarom hebben we het in de laatste module gezet.
Maar goed, laten we deze hoofdfunctie in de volgende tutorial maken.
Hetzelfde is hier niet het belangrijkste nu de drie C's zijn geïmplementeerd.
We zullen het dus niet regel voor regel coderen en de code uitbreiden.
En heel snel komen we bij de resultaten.
Tot die tijd, geniet van I.