WEBVTT

00:00.540 --> 00:05.090
Witam i zapraszam do tej opowieści prawie ostateczny tytuł tego modułu.

00:05.100 --> 00:10.260
Zamierzam wyjaśnić główny kod, który wykona całą sprawę, zanim uzyskamy ekscytujące wyniki

00:10.290 --> 00:11.930
i obejrzymy filmy.

00:12.090 --> 00:15.920
Więc to jest główny kod i jak widać, jest to dość krótki.

00:15.930 --> 00:21.120
Zaczynamy od zaimportowania bibliotek i modułów, a także różnych klas i funkcji, które

00:21.120 --> 00:24.270
stworzyliśmy jak Altikriti z naszego pliku modelu.

00:24.390 --> 00:30.210
Funkcja pociągu z pliku pociągu i funkcja testu z pliku testowego i oczywiście

00:30.270 --> 00:31.930
importujemy nasz optymalizator.

00:31.950 --> 00:37.350
Następnie zaczynamy od pierwszej sekcji, w której dostajemy do klasy wszystkie parametry.

00:37.500 --> 00:39.660
A to może być.

00:39.720 --> 00:44.040
Pamiętaj, że to obiekt BRAM, który stworzyliśmy z tej klasy.

00:44.040 --> 00:48.900
Za każdym razem, gdy otrzymujemy parametr taki jak wskaźnik uczenia się, nie jesteśmy obojętni.

00:49.200 --> 00:50.870
Więc przejrzyjmy je szybko.

00:50.880 --> 00:54.380
Ten pierwszy lub tutaj jest wskaźnik uczenia się.

00:54.480 --> 00:59.140
Tak więc, jak widać, wybieramy małe, a oceniacie, że drugi jest parametrem.

00:59.160 --> 01:09.810
Znowu przyjmujemy to jako 0. 39 przyjmujemy parametr OneTel zestaw 1 16 procesów 20 kroków i maks.

01:09.900 --> 01:10.850
Długość 10000.

01:10.850 --> 01:17.580
I mówiliśmy o tym, że jest to parametr, który ustawiliśmy, aby upewnić się, że agent nie utknął w

01:17.730 --> 01:20.910
nieskończoność w stanie środowiska, więc to zatrzyma grę.

01:21.060 --> 01:28.800
Jeśli długość odcinka przekracza tę maksymalną długość i ostatecznie otrzymamy nazwę naszego

01:28.800 --> 01:29.690
środowiska.

01:29.790 --> 01:30.890
Zerwanie wynosi zero.

01:30.990 --> 01:37.770
A przy okazji, możesz także grać w innych środowiskach, zmieniając tutaj nazwę

01:37.770 --> 01:38.410
środowiska.

01:38.430 --> 01:44.760
Więc jeśli chcesz zagrać w inne wersje Breakouta, a nawet w inne gry Atari, możesz po

01:45.030 --> 01:48.580
prostu zastąpić to zerwanie tutaj przez inne gry.

01:48.750 --> 01:53.730
Ale mogę wam powiedzieć, że wideo z breakoutem jest już bardzo trudne.

01:53.730 --> 01:56.030
W porządku, więc wszystkie parametry tutaj.

01:56.160 --> 01:59.330
A następnie jest główny kod dla głównego przebiegu.

01:59.550 --> 02:02.850
A więc zobaczmy, co robimy w tej pierwszej linii.

02:02.850 --> 02:05.270
Ustawiamy jeden wątek na rdzeń.

02:05.430 --> 02:11.880
Następnie w drugim wierszu otrzymujemy wszystkie renderers, wiesz, że tworzysz nowy obiekt klasy

02:12.150 --> 02:18.810
Paramjit, który będzie inicjował wszystkie te parametry tutaj, ponieważ są zmienne dołączone do tego obiektu

02:18.810 --> 02:19.490
BRAM.

02:19.560 --> 02:20.840
Następnie ustawiamy nasiona.

02:20.970 --> 02:28.830
Następnie dostajemy nasze środowisko za pomocą drzewa Utwórz i funkcjonujemy z nazwą naszego środowiska, które

02:28.830 --> 02:30.040
jest zerowe.

02:30.040 --> 02:35.410
Widzisz komórki o tej nazwie, a zatem parametr i nazwa jest całkiem zerowy.

02:35.430 --> 02:37.660
To pozwoli nam wydostać się z otoczenia.

02:37.890 --> 02:42.870
A tak przy okazji, nie jest to zwykły sposób tworzenia środowiska, ale wiesz, jak

02:42.870 --> 02:45.540
poprawić cały proces i poprawić wydajność.

02:45.690 --> 02:52.470
Wykorzystujemy to, aby faktycznie stworzyć zoptymalizowane środowisko i robimy to, wszechświat wszechświatowy jest

02:52.630 --> 02:57.730
pakietem, który zawiera wszystkie pakiety zainstalowane na otwartym silniku.

02:57.870 --> 03:01.490
Cóż, dzięki wszechświatowi otrzymujemy zoptymalizowane środowisko.

03:01.590 --> 03:03.320
Oto, o co tu chodzi.

03:04.050 --> 03:09.240
Następnie otrzymujemy nasz wspólny model, tworząc obiekt z aktywnej klasy krytyków.

03:09.240 --> 03:14.430
Dlatego ważne jest, aby zrozumieć, że ten wspólny model jest modelem współdzielonym przez różnych

03:14.430 --> 03:15.030
agentów.

03:15.180 --> 03:17.880
Mamy różne wątki w różnych kursach.

03:18.210 --> 03:25.410
A mówiąc o zagrożeniach na następnej linii, tutaj pomijany model dzielący pamięć na to, co robimy, przechowujemy model

03:25.500 --> 03:31.260
we wspólnej pamięci komputera, aby wszystkie wątki mogły uzyskać do niego dostęp, nawet jeśli

03:31.260 --> 03:32.960
są w innym kursie.

03:33.000 --> 03:34.510
Więc to właśnie tutaj robimy.

03:34.530 --> 03:42.410
Aby to umożliwić, otrzymujemy nasz optymalizator połączony z parametrami naszego wspólnego modelu oraz z szybkością

03:42.410 --> 03:45.780
uczenia się jednego punktu lub jednego.

03:45.930 --> 03:51.030
I znowu ważne jest, aby zrozumieć, że optymalizator jest również udostępniony, ponieważ działa

03:51.030 --> 03:57.720
on we współużytkowanym modelu i mówi, że w następnej linii zoptymalizowanej pamięci współdzielonej przechowujemy optymalizator w pamięci współdzielonej,

03:57.780 --> 04:02.530
aby wszyscy agenci mogli uzyskać do niego dostęp w celu optymalizacji model.

04:02.910 --> 04:10.260
Następnie inicjujemy nasze procesy, aby proces testowy nie aktualizował udostępnionego modelu, ale po prostu używa go do wypróbowania

04:10.260 --> 04:14.710
go w jednej części i wydrukowania wyniku i nagrania wideo.

04:14.820 --> 04:17.920
Dokładnie to robi się tutaj z testem Target equals.

04:17.940 --> 04:24.330
To jest proces testowy, a ten proces jest tutaj wycięty z tortur, że wiele wstępnego przetwarzania.

04:24.450 --> 04:31.600
Więc tutaj i co robi to, że w zasadzie uruchamia funkcję na niezależnym wątku.

04:31.860 --> 04:38.050
Tak więc, kiedy robimy restart, rozpoczynamy nowy proces, który był początkiem ubiegłego roku w tym czasie.

04:38.370 --> 04:45.030
A następnie z tym procesem do dołączenia P dodajemy proces do listy procesów.

04:45.270 --> 04:52.170
I na koniec w tej pętli robimy pętlę, aby uruchomić wszystkie inne procesy, które zostaną przeszkolone

04:52.380 --> 04:54.320
przez aktualizację modelu współdzielonego.

04:54.780 --> 04:58.030
I to w zasadzie dzieje się w ostatnich liniach kodu tutaj.

04:58.380 --> 05:03.870
Jeśli więc nie chcesz wdawać się w szczegóły, ważne jest, aby to

05:03.870 --> 05:09.420
działało w optymalny sposób i dlatego wszyscy powinniśmy dobrze wykonać ten kod i

05:09.420 --> 05:12.670
mieć wyszkolony model, a ostatecznie obejrzeć wyniki.

05:12.840 --> 05:14.150
Więc nie mogę się doczekać, aby to zrobić.

05:14.160 --> 05:16.110
To będzie ekscytujące.

05:16.110 --> 05:19.240
Postaram się teraz znaleźć ludzi, abyśmy wszyscy mogli to wspólnie oglądać.

05:19.350 --> 05:21.440
I tak do następnego razu I.
