Cześć i witamy w tutorialu Pythona w Statoil, zrobimy pierwszy krok do wdrożenia
modelu głębokiej teorii.
Zasadniczo więc zaimplementujemy cały proces algorytmu dyfuzji.
A więc wykorzystamy to, co stworzyliśmy wcześniej.
Taka jest architektura sieci neuronowej, która odtwarza pamięć, aby zintegrować ją z całym
procesem uczenia się.
Cały ten algorytm uczenia się zmieści się w jednej klasie.
To ostatnie, co robimy, aby wprowadzić sztuczną inteligencję.
Klasa ta będzie zawierała tylko różne funkcje.
Będziemy mieli w nim funkcje, które stworzą i zainicjują wszystkie zmienne związane
z naszymi przyszłymi obiektami objazdowymi, które będą reprezentować sam model i będą miały inne funkcje.
Jednym z nich będzie oczywiście wybór odpowiedniego działania za każdym razem.
Będziemy mieć także podstawową funkcję funkcji aktualizacji, aby uzyskać ten rdzeń i mieć pojęcie o tym, jak nauka
idzie, jeśli wszystko idzie dobrze.
Jeśli eksploracja idzie dobrze i jeśli może przejść do eksploatacji, a następnie będziemy mieć bezpieczną
funkcję, aby zaoszczędzić jutro, to jest uratować mózg samochodu, a następnie załadować funkcję.
Mamy więc kilka funkcji do wykonania.
Zamierzamy wykonać jedną funkcję, aby każdy mógł pracować.
A dzisiaj zaczniemy od funkcji końcowej, jak zwykle, kiedy robimy zajęcia.
Ale najpierw nie zapominajmy o wprowadzeniu klasy, więc nazwiemy ją D.
Q A dla twojej sieci wywołujemy nawias.
A potem idziemy z naszą pierwszą funkcją.
Zróbmy więc def, a następnie podwójny podkreślenie, a następnie jego podwójne podkreślenie i nawias.
Tak jak zrozumieliście w tej funkcji, zamierzamy wprowadzić zmienne związane z naszym obiektem.
Tak więc będziemy mieć kilka linii rozpoczynających się od siebie, a my w zasadzie stworzymy
i zainicjujemy wszystkie zmienne, które są potrzebne do wdrożenia sieci D2.
Tak więc na przykład stworzymy obiekt lub sieć, ponieważ oczywiście potrzebujemy naszej głębokiej sieci neuronowej,
wtedy potrzebujemy naszej pamięci.
Stworzymy kolejną zmienną dla pamięci.
Więc będziemy mieć kolejną zmienną samouwielbienie, ale to nie wszystko, co będziemy musieli stworzyć.
Niektóre zmienne dla ostatniej daty.
Ostatnia akcja i ostatnie słowo.
To oczywiście znasz zmienne, które widzisz w algorytmie dyfuzji.
A co jeszcze.
No cóż, potrzebujemy również optymalizatora, który znamy, aby wykonać siatkę stochastyczną w znaczeniu wag danych w
zależności od tego, ile przyczynią się do błędu.
Kiedy sztuczna inteligencja robi błąd, a potem myślę, że to w zasadzie zmienne, które musimy teraz
stworzyć i zainicjować.
Ale w tej funkcji init najpierw wstawimy kilka argumentów jako zwykłe self, które jest argumentami odnoszącymi się
do naszego obiektu.
Odkąd wiesz, że stworzymy obiekt klasy sieciowej.
No cóż, ponieważ klasa sieci przyjmuje argumenty w rozmiarze wejściowym funkcji init, a akcja Cóż jest
taka sama.
Tworząc obiekt klasy sieciowej, musimy wybrać argument wielkości wejściowej i faktyczny
argument.
Dlatego możemy po prostu skopiować je
tutaj i tutaj idziemy.
Te argumenty staną się teraz.
Również niektóre argumenty nie trwały długo.
Ilekroć tworzymy jakieś przyszłe obiekty różnych klas, które będą miały pewne przyszłe modele ról, będziemy
musieli określić rozmiar wejściowy, który przypominam, to liczba wymiarów w wektorach, które zawierają
twoje stany.
Twoje stany wejściowe i liczba akcji, czyli liczba możliwych działań, które może wykonać samochód.
Więc wam przypomina.
Są to albo idź w lewo idź prosto, albo idź w prawo.
W porządku, doskonale.
Wtedy wiesz, że będziesz tworzyć nowy obiekt klasy pamięci powtórek, aby utworzyć
obiekt pamięci, aby uzyskać naszą pamięć przejść oraz w informacji, którą mamy argument pojemności.
Ale ponieważ będziemy go używać tylko raz, kiedy tworzymy pamięć, a nie później,
więc nie będziemy musieli określać argumentu wydajności.
Moglibyśmy to zrobić, ale bezpośrednio wprowadzimy liczbę przejść, które chcemy mieć w naszej pamięci.
Ale wtedy potrzebujemy ostatniego argumentu, który ma uzyskać parametr w modelu nauczyciela.
Pamiętaj, że parametr gamma to opóźnienie.
I to jest parametr równania, dlatego go tutaj umieścimy, ponieważ będziemy go później
używać kilka razy.
Więc, ułóżmy to tutaj.
Nazwiemy to Gamma.
W związku z tym jest to tylko nazwa argumentu, a następnie podajemy wszystkie argumenty potrzebne do tego celu
w jego funkcji.
Oznacza to, że ilekroć tworzymy nasz słownikowy model, ilekroć tworzymy obiekt nauczyciela w
klasie.
Będziemy musieli określić jako argumenty wielkość wejściową liczbę akcji i parametr.
I skończymy z prawdziwymi wartościami dla nich.
W porządku, więc teraz wejdźmy do funkcji.
DOBRZE.
Więc teraz to w zasadzie będzie łatwe.
Zaraz stworzymy i zainicjujemy wszystkie potrzebne nam zmienne.
Zacznijmy więc od pierwszego.
Zacznijmy od gamma.
Właściwie współczynnik opóźnienia.
Ponieważ wojewoda chce być przywiązany do jej obiektu, zaczynamy od siebie.
Więc gamma będzie zmienną naszego nauczyciela i samego modelu, że gamma równa się argumentom, które będą
wprowadzane podczas tworzenia obiektu klasy detune.
Więc Janna i tam idziemy z drugim argumentem.
Drugim argumentem będzie okno nagrody.
Czym jest to okno?
Cóż, to będzie przesuwane okno średniej z ostatnich 100 słów, które użyjesz tylko do
oceny ewolucji wykonania, o którym wiesz, że będzie miało znaczenie tego słowa w tym wojennym Windu,
które z czasem ześlizgnie.
A tym, co chcemy zaobserwować, jest znaczenie ostatnich 100 słów narastających z czasem.
Więc zainicjujmy to samo, aby nagradzać okno podkreślenia.
A więc, ponieważ będzie to przesuwane okno ewoluującej średniej z ostatnich 100 słów.
Cóż, zamierzamy go zainicjować jako pustą listę, a następnie rozszerzymy, aby oznaczać, że pracujemy w godzinach nadliczbowych.
W porządku, potem bardziej ekscytujące.
Stwórzmy naszą sieć neuronową.
Więc nazwiemy to samoukiem Mario, ponieważ to jest sedno modeli.
Nazywam to modelem, a ten model będzie niczym innym jak przedmiotem w tej klasie i stworzeniem
takiego obiektu.
Przyjmujemy naszą klasową sieć w nawiasach i tutaj właśnie podajemy argumenty klasy, ale argumenty te umieszczamy w argumentach
funkcji init i dlatego po prostu musimy je skopiować tutaj i
wkleić je do klasy sieci, a potem idź z tym wierszem kodu.
Tworzymy jedną sieć neuronową do nauki modelu idealnego, a następnie stwórzmy pamięć.
Znowu zamierzamy stworzyć nowe Vargo, które nazywamy samoukiem.
I znowu będzie to obiekt klasy pamięci powtórzeń.
Po prostu weźmy nazwę lub klasę, dajmy skopiować, spójrzmy prawdzie w oczy, że w tym nawiasie musimy umieścić
pojemność, ponieważ pojemność jest argumentem funkcji i jest to jedyny argument, który musimy
tu zastosować.
Jaką więc pojemność wybieramy pamiętajmy, że odpowiada liczbie przejść, na końcu
liczba ostatnich zdarzeń wskazuje na ostatnią akcję i ostatnie słowo.
I tak, jak wspomniano w jednym z trudów z Priester, przeniesiemy do pamięci sto tysięcy sto
tysięcy przejść, a potem spróbujemy z tej pamięci, aby uzyskać niewielką liczbę losowych przejść
i tego, na którym model będzie w porządku.
Teraz mamy doskonałą pamięć.
Teraz pobierzmy nasz optymalizator.
Znowu więc tworzymy nową zmienną, którą nazywamy optymalizatorem, więc optymalizator to kolejna zmienna naszego przyszłego
wycofywania obiektu z tego optymalizatora.
A teraz, gdy wrócimy, zobaczysz, że przywieźliśmy torturowany Upton, który jest modułową pochodnią, zawierającą wszystkie narzędzia do wykonania,
aby uzyskać siatkę w środku.
Oczywiście zawiera on kilka optymalizatorów, a my daliśmy mu skrót Upton, a więc tutaj, co zamierzamy zrobić,
to wziąć model do niego, który jest pochodnią do niego i z tego modułu mamy zamiar
wziąć jeden z optymalizatory.
Jak widać, wszystkie są tutaj wymienione.
Wiele z nich jest doskonałych, na przykład Propp jest doskonałym optymalizatorem.
Jest na przykład wysoce zalecany do zapisu sieci neuronowych lub bez głębokiego uczenia się bez nadzoru.
Ale drugi, który jest doskonały i że wybierze, to optymalizator atomu.
To właśnie zobaczysz, że dzięki temu otrzymasz dobry samochód do samodzielnego prowadzenia.
Ale znów jesteście mile widziani, aby wypróbować inne, z którymi możecie wypróbować rekwizyty, ale do metalu
wybierzemy Adama.
Więc naciskam enter.
I faktycznie zauważysz, że tu jest stolica.
To dlatego, że tworzymy obiekt klasy Atom.
To jest klasa, ale obiektem będzie sam optymalizator atomu.
Ale ponieważ jest to klasa, musimy podać kilka argumentów, argumenty klasy Atom i
argumenty są parametrami, które mogą dostosować twój i optymalizator.
Na przykład zwykle jest to szybkość uczenia się zaniku lub inne parametry.
A oprócz podjęcia wszystkich parametrów Ormeau określimy współczynnik uczenia się.
To początek parametrów naszego modelu.
Możemy uzyskać je z własnym modelem wątpliwości.
Więc to jest model, który stworzyliśmy w tym modelu samouka z naszej własnej klasy.
Tak więc samouk modelu, a następnie, aby uzyskać dostęp do parametrów modelu, dodajemy po prostu kolejną kropkę,
a następnie parametry z pewnym nawiasem.
Chodzi o to, aby podłączyć optymalizator addonów do naszej sieci neuronowej, którą stworzyliśmy tutaj ponownie, a jak
już wspomnieliśmy, dodamy współczynnik uczenia się, a argumentem jest to, że jest to nasz.
I ustawimy wartość równą wartości takiej, że uczenie się nie nastąpi zbyt szybko, jeśli uzyskamy zbyt duży stopień uczenia
się, wtedy AI AI będzie się uczyć poprawnie.
Chcemy dać naszej AI trochę czasu na zbadanie uczyć się na błędach.
Wiesz, kiedy karzemy, gdy popełnia się błędy, takie jak przechodzenie przez jakiś sens lub zbliżanie
się do ściany.
Chcemy dać trochę czasu na naukę.
Chcemy, aby droga do sieci neuronowej była na bieżąco.
I tak dobra wartość dla szybkości uczenia się, którą otrzymałem po wypróbowaniu kilku z nich, wynosi 0. 2 lub jeden.
W porządku i to wszystko, czego potrzebujemy do stworzenia optymalizatora.
Zasadniczo tworzysz obiekt klasy Atom.
Świetny.
A ostatnie trzy zmienne, których potrzebujemy, to zmienne składające się na nasze zdarzenia przejściowe.
To jest ostatnia data ostatniej akcji i ostatniego słowa.
W zasadzie to właśnie teraz stworzymy i będziemy musieli je zainicjować.
Zacznijmy więc od ostatniej daty ostatniej daty, którą nazwijmy to samoukiem.
Ostatni stan podkreślenia, a następnie w jaki sposób zamierzasz go zainicjować.
Pamiętajmy, że ostatnia data to wektor 5 dominacji wektora zakodowanego w jednym stanie
środowiska.
Dla przypomnienia, te pięć wymiarów to trzy sygnały z trzech czujników w linii
prostej i prawej oraz orientacji i orientacji ujemnej.
Jest to więc wektor i intuicyjny zmysł.
Ale przez pochodnie musi być czymś więcej niż wektorem.
W rzeczywistości musi to być tensor palnika.
Ale nie tylko musi to być czujnik palnika, ale także musi mieć jeszcze jeden wymiar,
który chciałbym nazwać fałszywym wymiarem, który odpowiada partii.
A to dlatego, że ostatnie osiem będzie wejściem sieci neuronowej, ale podczas pracy ze mną, kiedy to
działa w ogóle, czy to z gęstszym przepływem niesie pochodnię, podczas gdy wektor wejściowy nie może sam w
sobie być zwykłym wektorem.
Musi być w partii.
Sieć może akceptować tylko wsad obserwacji wejściowych i dlatego nie tylko stworzy tensor
dla wektorów stanu wejściowego, ale także utworzy ten fałszywy wymiar odpowiadający partii.
Zróbmy to i zacznijmy od zainicjowania tensora palnika, aby to zrobić, nie ma nic
prostszego.
Przyjmujemy bibliotekę torche, a następnie kropkę, a następnie użyjemy klasy tensorów, ponieważ jak można się domyślić,
stworzy to obiekt klasy tensorowej, która jest obiektem tensorowym.
I w tym tensorze musimy postawić argument, który określi wielkość tensora.
Możesz to zrobić, jak tablicę z jednym rodzajem.
Ale w zasadzie to, co teraz będzie reprezentować, jest oczywiście tym stanem wejściowym, który widzisz ma wektor, a
więc określenie liczby elementów, które musi mieć odległość.
Musimy oczywiście użyć wielkości wejściowej, ponieważ wielkość wejściowa jest dokładnie liczbą wymiarów
naszych wektorów stanu wejściowego.
Teraz powinienem powiedzieć tensory.
A więc po prostu musimy wprowadzić w naszej klasie tensorów, aby stworzyć obiekt tensorowy.
Cóż, to jest nieprecyzyjne.
Później wielkość wejściowa zostanie określona ilościowo.
W porządku, to dobrze.
To pierwsza rzecz wykonana.
Właśnie zainicjowaliśmy tensor tak, jak powinien.
Ale pamiętajmy, że musimy zrobić jeszcze jedną rzecz, której potrzebujemy, aby stworzyć ten fałszywy wymiar,
ponieważ jest to tym, czego sieć oczekuje od swoich danych wejściowych i aby stworzyć ten do badania, który przy
okazji musi być pierwszym mechanizmem, w którym znasz obrażenia wrzucony do partii pierwszy raz o tym
wspomnę, powiedzmy bardzo dobrze.
Cóż, aby to zrobić, musimy po prostu dodać to i wycisnąć, a następnie w jakimś nawiasie.
Musimy umieścić indeks tego wielkiego wymiaru.
I jak właśnie powiedziałem, ten fałszywy wymiar musi być pierwszą animacją z ostatniej daty, a ponieważ
indeksy i bajty i początkowe zero, musimy wprowadzić zero, aby ten nowy silnik paradygmatu stał się silnikiem
pierwszego rzędu.
Mamy zatem pierwszy silnik czasu odpowiadający partii, a następnie diament powinien odpowiedzieć na
ten czujnik, który będzie zawierał pięć elementów twojego wejścia, wskazując trzy orientacje sygnałów i orientację
ujemną.
A potem zaczynamy poprawnie inicjować nasze stany wejściowe.
Idealny.
A następnie dwie zmienne, które należy przejść i to będzie znacznie łatwiejsze, ponieważ następna zmienna jest ostatnią
akcją.
Oto nowy Roybal, który tworzymy dla ostatniej akcji obiektu.
I pamiętajcie w pierwszym samouczku sekcji Powiedziałem wam, że działania będą miały wartość
0 1 lub 2, a następnie za pomocą wektora obrotu akcji przekształcimy te indeksy tych działań w
kąty obrotu, które przypominam 0 20 lub minus 20.
Możemy dzięki temu odświeżyć naszą pamięć.
Cóż, jest dokładnie tutaj.
Akcja do rotacji, jeśli akcja wynosi zero.
Cóż, to będzie odpowiadać pierwszemu indeksowi zerowemu, jeśli czynność wynosi 1.
Będzie to odpowiadało indeksowi jednego z tych wektorów o 20 stopniach, a
jeśli to działanie, otrzymamy minus 20 stopni, czyli kąt obrotu naszego samochodu, kiedy gramy akcję.
W porządku.
A zatem, ponieważ akcja będzie miała wartość 0 1 lub 2, akcja jest wykonywana dla prostej
liczby.
I tak po prostu możemy go zainicjować do zera.
Nie musimy tworzyć dziesiątek ani słyszeć niczego innego.
Musimy tylko zainicjować go zerem.
I w końcu.
Cóż, to jest ostatnie słowo.
To ja, to ostatnie słowo.
No to jedziemy.
I znowu słowo jest liczbą zmiennoprzecinkową, którą przypominam między minus 1 a plus 1.
To znowu numer.
A co do akcji.
Zainicjujemy go na zero, a następnie jedziemy.
Gratulacje są w nim funkcja jest gotowa.
Teraz jesteśmy gotowi przejść do ekscytujących rzeczy.
A tak naprawdę to najważniejsza rzecz w sztucznej inteligencji, która decyduje o tym, które akcje należy grać
za każdym razem i za każdym razem. A to właśnie zamierzamy zrobić w następnym ćwiczeniu, tworząc metodę wyboru akcji.
Zróbmy to w następnej pracy i do tego czasu I.