Hallo und willkommen zu diesem Python-Tutorial in Statoil. Wir werden den ersten Schritt bei der Implementierung
des tiefen Theoriemodells machen.
Im Grunde sind wir dabei, den gesamten Prozess des Diffusionsalgorithmus zu implementieren.
Und so werden wir das nutzen, was wir zuvor geschaffen haben.
Dies ist die Architektur des neuronalen Netzwerks, um den Speicher nachzuspielen, um ihn in den gesamten Lernprozess
der Dequeue zu integrieren.
Und dieser ganze Lernalgorithmus wird in eine Klasse passen.
Das ist das letzte, was wir machen, um künstliche Intelligenz zu implementieren.
Und diese Klasse wird nur verschiedene Funktionen enthalten.
Wir haben also die Funktionen in ihm, die alle Variablen erstellen und initialisieren, die
mit unseren zukünftigen Umleitungsobjekten verknüpft sind, die das Modell selbst darstellen und einige andere Funktionen haben.
Eine davon ist natürlich, jedes Mal die richtige Aktion auszuwählen.
Wir werden auch eine Update-Funktionskernfunktion haben, um diesen Kern zu erhalten und eine Vorstellung davon zu haben, wie das Lernen
läuft, wenn es gut läuft.
Wenn die Erkundung gut verläuft und sie zur Ausbeutung übergehen kann, dann
haben wir eine sichere Funktion, um morgen zu retten.
Wir müssen also ein paar Funktionen erstellen.
Wir werden eine Funktion für jeden erstellen, die sich darum bemüht.
Und heute beginnen wir wie üblich mit der Endfunktion, wenn wir eine Klasse machen.
Aber vergessen wir nicht zuerst die Klasse einzuführen, also nennen wir sie D.
F Und für Ihr Netzwerk rufen Sie dann einige Klammern an.
Und dann gehen wir mit unserer ersten Funktion.
Also machen wir diese Def, dann doppelte Unterstreichung, dann nochmal doppelte Unterstreichung und Klammern.
So wie Sie in dieser Funktion verstanden haben, werden wir die an unser Objekt angehängten Variablen einführen.
Wir haben also ein paar Zeilen, die alle von selbst beginnen, und wir erstellen und initialisieren
im Wesentlichen alle Variablen, die zur Implementierung des D2-Netzwerks erforderlich sind.
Wir werden zum Beispiel ein Objekt oder ein Netzwerk erstellen, da wir natürlich unser tiefes neuronales Netzwerk brauchen,
um unser Gedächtnis zu brauchen.
Wir erstellen eine weitere Variable für den Speicher.
Wir haben also noch eine andere Variable für sich selbst, aber das ist nicht alles, was wir auch schaffen müssen.
Einige Variablen für das letzte Datum.
Die letzte Aktion und das letzte Wort.
Sie kennen natürlich die Variablen, die Sie im Diffusionsalgorithmus sehen.
Und dann noch was.
Nun, wir benötigen auch ein Optimierungsprogramm, das Sie kennen, um ein stochastisches Raster im Sinne von Datengewichtungen
durchzuführen, je nachdem, wie viel sie zum Fehler beitragen.
Wenn die KI einen Fehler macht, denke ich, dass dies im Wesentlichen die Variablen sind, die wir jetzt
erstellen und initialisieren müssen.
Aber in dieser init-Funktion werden wir ein paar Argumente zuerst als normales Selbst angeben. Dies sind die Argumente, die sich
auf unser Objekt beziehen.
Dann, da Sie wissen, werden wir ein Objekt der Netzwerkklasse erstellen.
Nun, da die Netzwerkklasse als Argument für die Eingabe-Größe der init-Funktion und die Aktion verwendet
wird.
Wenn Sie ein Objekt der Netzwerkklasse erstellen, müssen Sie ein Eingabegrößenargument und das tatsächliche
Argument auswählen.
Deshalb können wir sie einfach hier
kopieren und los geht's.
So werden diese Argumente jetzt werden.
Auch einige Argumente waren nicht von Dauer.
Wann immer wir einige zukünftige Objekte der verschiedenen Klasse erstellen, die einige zukünftige Vorbilder darstellen. Nun müssen wir die
Eingabegröße angeben, an die ich mich erinnere, die Anzahl der Dimensionen in den Vektoren, die
Ihre Zustände enthalten.
Ihre Eingabestatus und eine Reihe von Aktionen, dh die Anzahl der möglichen Aktionen, die das Auto ausführen kann.
Also erinnere ich dich.
Gehen Sie entweder geradeaus oder rechts.
Okay, perfekt.
Dann wissen Sie, dass Sie ein neues Objekt der Wiedergabespeicherklasse erstellen werden, um das Speicherobjekt
zu erstellen, um unsere Erinnerung an die Übergänge und die Informationen zu erhalten, die das Kapazitätsargument enthalten.
Da wir es jedoch nur einmal verwenden werden, wenn wir Speicher erstellen, und nicht
danach, müssen wir das Kapazitätsargument nicht angeben.
Wir könnten dies tun, werden aber direkt die Anzahl der Übergänge eingeben, die unser Gedächtnis haben soll.
Dann brauchen wir noch ein letztes Argument, um den Parameter im Lehrermodell abzurufen.
Denken Sie daran, dass dieser Gamma-Parameter die Verzögerung ist.
Und das ist ein Parameter der Gleichung und deshalb werden wir es hier angeben, da wir ihn
später mehrmals verwenden werden.
Also lass es uns hier stellen.
Wir nennen es Gamma.
Dafür ist es nur der Name des Arguments und dann gehen wir davon aus, dass alle Argumente, die Sie dafür benötigen, in
seiner Funktion benötigt werden.
Das bedeutet also, dass jedes Mal, wenn wir unser Wörterbuchmodell erstellen, jedes Mal, wenn wir ein Objekt des Lehrers
im Unterricht erstellen.
Nun müssen wir als Eingangsgröße die Anzahl der Aktionen und den Parameter angeben.
Und wir enden mit den wahren Werten für sie.
Nun gut, gehen wir jetzt in die Funktion.
OK.
Also im Grunde wird dies einfach sein.
Wir sind gerade dabei, alle benötigten Variablen zu erstellen und zu initialisieren.
Und so fangen wir mit dem ersten an.
Beginnen wir mit Gamma.
Eigentlich der Verzögerungskoeffizient.
Da dies ein Voivode ist, der an sein Objekt angehängt werden soll, beginnen wir mit Selbst.
Gamma ist also eine Variable unseres Lehrers und des Modells selbst. Gamma entspricht den Argumenten, die eingegeben werden,
wenn ein Objekt der Detune-Klasse erstellt wird.
Also Janna und da gehen wir mit dem zweiten Argument.
Das zweite Argument wird das Belohnungsfenster sein.
Was ist das für ein Fenster?
Nun, das wird das gleitende Fenster des Mittelwerts der letzten 100 Wörter sein, mit dem Sie nur
die Entwicklung der Leistung beurteilen werden, von der Sie wissen, dass sie die Bedeutung des Wortes in diesem Krieg Windu hat,
das im Laufe der Zeit abrutscht.
Was wir beobachten wollen, ist die Bedeutung der letzten 100 Wörter, die mit der Zeit zunehmen.
Also lasst es uns mit diesem Belohnungsunterstrich-Fenster initialisieren.
Und da dies ein Schiebefenster des sich entwickelnden Mittelwerts der letzten 100 Wörter sein wird.
Nun, wir werden es als leere Liste initialisieren und dann erweitern, um Überstunden zu machen.
Alles klar, dann aufregender.
Lassen Sie uns unser neuronales Netzwerk schaffen.
Wir werden es Mario als Autodidakt bezeichnen, da dies im Grunde das Herz der Modelle ist.
Ich nenne es Modell und dieses Modell wird nichts anderes als ein Subjekt in dieser Klasse sein und ein
solches Objekt erstellen.
Wir nehmen unser Klassennetzwerk in Klammern und setzen hier nur die Argumente der Klasse, aber wir fügen diese Argumente in die
Argumente der init-Funktion ein. Deshalb müssen wir sie einfach hier kopieren und
sie einfach in die Netzwerkklasse einfügen und dann wir Gehen Sie mit dieser Codezeile.
Wir schaffen ein neuronales Netzwerk für ein perfektes Lernmodell, dann erstellen wir ein Gedächtnis.
Wir werden also wieder einen neuen Vargo erstellen, den wir selbstlernendes Gedächtnis nennen.
Und wieder wird dies ein Objekt der Wiedergabespeicherklasse sein.
Nehmen wir also einfach den Namen oder die Klasse, lasst uns kopieren, aber stellen wir uns der Tatsache, dass wir in einigen Klammern die
Kapazität einsetzen müssen, weil die Kapazität ein Argument der Funktion ist und dies das einzige Argument ist, das
wir hier benötigen.
Welche Kapazität werden wir wählen? Denken Sie daran, dass die Anzahl der Übergänge der Anzahl
der Ereignisse entspricht, die Sie als letzte Aktion und als letztes Wort angegeben haben.
Und so, wie in einer der Priester-Mühen erwähnt, werden wir einhunderttausend einhunderttausend Übergänge in das Gedächtnis aufnehmen,
und dann werden wir dieses Gedächtnis abtasten, um eine kleine Anzahl von zufälligen Übergängen zu
erhalten, und das, auf dem das Modell OK ist.
Jetzt haben wir unser Gedächtnis perfekt.
Nun lasst uns unseren Optimierer holen.
Also selbst erstellen wir eine neue Variable, die wir Optimizer nennen. Optimizer ist also eine weitere Variable
unseres zukünftigen Dequeue eines Objekts als Optimierer.
Und jetzt, wenn wir zurückgehen, können Sie sehen, dass wir Upton Folter importiert haben, eine modulare Taschenlampe, die alle Werkzeuge enthält, um
das Gitter in die Mitte zu bekommen.
Natürlich enthält es einige Optimierer, und wir haben ihm die Abkürzung Upton gegeben. Daher wollen wir hier
das Modell zu ihm bringen, das ist das, was er will, und aus diesem Modul werden
wir eines der Optimierer.
Wie Sie sehen, sind sie hier alle aufgeführt.
Viele von ihnen sind ausgezeichnet, zum Beispiel ist Ropps Propp ein hervorragender Optimierer.
Es wird beispielsweise dringend empfohlen, neuronale Netzwerke oder unbeaufsichtigtes Deep Learning aufzunehmen.
Aber der andere, der ausgezeichnet ist und den er wählen wird, ist der Atom-Optimierer.
Das ist das, was Sie sehen werden, mit dem man ein gutes selbstfahrendes Auto bekommt.
Sie sind aber auch herzlich eingeladen, andere zu probieren, aber Sie können sich für Armlehne entscheiden, aber für Metal wählen
wir Adam.
Also drücke ich die Eingabetaste.
Und tatsächlich werden Sie feststellen, dass sich hier das Kapitol befindet.
Das liegt daran, dass wir ein Objekt der Atom-Klasse erstellen.
Dies ist eine Klasse, aber das Objekt ist selbst ein Atom-Optimierer.
Da dies jedoch eine Klasse ist, müssen wir einige Argumente angeben. Die Argumente der Atom-Klasse und
die Argumente sind alle Parameter, die Ihr Optimizer anpassen können.
Das ist zum Beispiel normalerweise die Lernrate des Verfalls oder einiger anderer Parameter.
Neben den Parametern von Ormeau legen wir eine Lernrate fest.
Es ist also der Anfang der Parameter unseres Modells.
Wir können sie mit einem Selbstzweifel-Modell erhalten.
Das ist das Modell, das wir hier als Autodidakt aus unserer eigenen Klasse erstellt haben.
Um das Autodidakt-Modell aufzurufen und dann auf die Parameter des Modells zuzugreifen, fügen wir auf einfache Weise einen weiteren Punkt
und dann Parameter mit einigen Klammern hinzu.
Das heißt, um den Addon-Optimierer mit dem neuronalen Netzwerk zu verbinden, das wir hier wieder erstellt haben.
Wie bereits erwähnt, werden wir eine Lernrate hinzufügen, und das Argument dafür ist unser.
Und wir setzen ihn auf einen Wert, so dass das Lernen nicht zu schnell erfolgt, wenn die Lernrate zu groß
wird, dann lernt die KI die KI richtig.
Wir möchten unserer KI etwas Zeit geben, um aus ihren Fehlern zu lernen.
Du weißt, wenn wir es bestrafen, wenn es einige Fehler macht, wie zum Beispiel einen Sinn zu finden oder zu nahe an
eine Wand zu kommen.
Nun, wir möchten etwas Zeit zum Lernen geben.
Wir wollen einen Weg zum neuronalen Netz, um korrekt zu datieren.
Ein guter Wert für die Lernrate, nach der ich mehrere ausprobiert habe, ist 0. 2 oder eins.
Alles klar und das ist alles, was wir brauchen, um einen Optimierer zu erstellen.
Im Grunde erstellen Sie also ein Objekt der Atom-Klasse.
Großartig.
Und die letzten drei Variablen, die wir brauchen, sind die Variablen, aus denen sich unsere Übergangsereignisse zusammensetzen.
Das ist also das letzte Datum, die letzte Aktion und das letzte Wort.
Das ist im Grunde das, was wir jetzt erstellen, und wir müssen sie nur initialisieren.
Beginnen wir mit dem letzten Datum, dem letzten Datum, das wir als Autodidakt bezeichnen.
Letzter Unterstrichstatus und wie werden Sie ihn initialisieren.
Denken Sie daran, dass das letzte Datum ein Vektor von 5 Herrschaften ist, ein Vektor, der in einem Zustand der Umgebung
codiert ist.
Zur Erinnerung, diese fünf Dimensionen sind die drei Signale der drei Sensoren, die
gerade und rechts bleiben, sowie Orientierung und Minus-Orientierung.
Das ist also ein Vektor und ein intuitiver Sinn.
Aber für die Fackel muss es mehr als ein Vektor sein.
Es muss tatsächlich ein Brennertensor sein.
Aber es muss nicht nur ein Brennersensor sein, sondern es muss eine weitere Dimension haben, die ich
als falsche Dimension bezeichnen möchte, die der Charge entspricht.
Und das ist, weil die letzten acht die Eingabe des neuronalen Netzwerks sein werden, aber wenn ich mit mir
arbeite, wenn das im Allgemeinen funktioniert, ob es bei dichterem Fluss einen Brenner trägt, während die Eingangsvektoren nicht ein einfacher
Vektor für sich sein können.
Es muss in einer Reihe sein.
Das Netzwerk kann nur Stapel von Eingabebeobachtungen akzeptieren. Daher wird nicht nur ein Tensor
für die Eingabezustandsvektoren erstellt, sondern auch diese dem Stapel entsprechende falsche Dimension.
Also machen wir das und beginnen mit dem Initialisieren eines Brennersensors, damit es nicht einfacher
ist.
Wir nehmen unsere Brennerbibliothek, dann Punkt, und dann werden wir die Tensor-Klasse verwenden, da, wie Sie vielleicht schon vermutet
haben, ein Objekt der Tensor-Klasse erstellt wird, das ein Tensor-Objekt ist.
In diesem Tensor müssen wir ein Argument angeben, das die Größe des Tensors angibt.
Sie können sich vorstellen, dass Sie wie ein Array mit einem einzigen Typ sind.
Aber im Grunde wird dies nun natürlich dargestellt. Dieser Eingabezustand, den Sie sehen können, hat einen Vektor und damit
die Anzahl der Elemente, die der Abstand haben muss.
Nun, wir müssen natürlich die Eingabegröße verwenden, da die Eingabegröße genau die Anzahl der
Dimensionen unserer Eingabezustandsvektoren ist.
Jetzt sollte ich Tensoren sagen.
Was wir also einfach in unsere Tensorklasse eingeben müssen, um ein Tensorobjekt zu erstellen.
Nun, das ist ungenau.
Und später wird die Eingangsgröße quantifiziert.
In Ordnung, das ist gut.
Das ist das Erste, was gemacht wurde.
Wir haben den Tensor gerade so initialisiert, wie er sein sollte.
Denken Sie jedoch daran, dass wir noch etwas tun müssen, um diese falsche Dimension zu erstellen, denn
dies ist es, was das Netzwerk für seine Eingaben erwartet, und diese zur Überprüfung zu erstellen, die übrigens der erste Motor sein
muss, an dem Sie den Schaden kennen Ich werde das zum ersten Mal erwähnen, wenn ich dies erwähne,
sagen wir es sehr gut.
Nun, um das zu tun, müssen wir das einfach hinzufügen und dann in ein paar Klammern drücken.
Wir müssen den Index dieser großen Dimension setzen.
Und wie ich gerade gesagt habe, diese gefälschte Dimension muss die erste Animation des letzten Datums sein,
und da Indizes und Bytes sowie Null gestartet sind, müssen wir Null eingeben, damit diese neue Paradigma-Engine zur ersten
Line-Engine wird.
Wir haben also eine erste Engine, die der Charge entspricht, und dann sollte der Diamant
auf diesen Sensor reagieren, der die fünf Elemente Ihrer Eingangszustände, die drei Signale, die Orientierung und die negative
Orientierung enthält.
Dann haben wir unsere Eingabestatus richtig initialisiert.
Perfekt.
Und dann noch zwei Variablen, und das wird viel einfacher, weil die nächste Variable die letzte Aktion
ist.
Das ist ein neuer Roybal, den wir für Object letzte Aktion erstellen.
Denken Sie daran, im ersten Tutorial des Abschnitts, den ich Ihnen erzählt habe, dass die
Aktionen entweder 0 1 oder 2 sein werden, und dann mithilfe des Aktionsrotationsvektors diese Indexe dieser Aktionen in die Drehwinkel
umwandeln, an die ich unsere 0 erinnere 20 oder minus 20.
Wir können damit tatsächlich unser Gedächtnis auffrischen.
Nun ist es genau hier.
Aktion zur Drehung, wenn die Aktion Null ist.
Nun, dies entspricht dem ersten Index von Null, wenn die Aktion 1 ist.
Dies wird dem Index eines dieser Vektoren von 20 Grad entsprechen, und wenn die Aktion
zu minus 20 Grad wird, wird dies der Drehwinkel unseres Autos sein, wenn wir die Aktion spielen.
Gut.
Und da die Aktion entweder 0 1 oder 2 sein wird, ist die Aktion für eine einfache Nummer
vorhanden.
Und so können wir es ganz einfach auf Null initialisieren.
Wir müssen keine Zehner schaffen oder sonst noch etwas hören.
Wir müssen es nur mit Null initialisieren.
Und schlussendlich.
Nun, das ist das letzte Wort.
Es ist das letzte Wort.
Da gehen wir.
Und wieder ist das Wort eine Float-Nummer, an die ich mich erinnere, zwischen minus 1 und plus 1.
Das ist also wieder die Nummer.
Und was die Action angeht.
Wir werden es auf Null initialisieren und dann gehen wir.
Glückwunsch sind in seiner Funktion bereit.
Nun können wir uns auf das aufregende Material konzentrieren.
Und eigentlich ist das Wichtigste für die KI, dass sie
entscheidet, welche Aktion zu jeder Zeit und zu jeder Zeit gespielt wird.
Also lass uns das neben Mühe tun und bis dahin ich.