[PYTHON] Report_Deep Learning (Teil 2)

TensorFlow In der Praxis ist es üblich, mit einer Bibliothek wie Tensorflow zu erstellen, anstatt aus numpy zu erstellen.

Verwendung von Tensorflow image.png

Beachten Sie, dass Tendorflow anders als numpy geschrieben ist. -Import ist das gleiche wie numpy. -Verwenden Sie tr.constant (), um die Konstante zu definieren. Definieren Sie in der Reihenfolge der Konstanten (Anzahl, Datentyp, Arrayform). In a ist nur die Nummer 1 definiert, in b ist die Nummer 2 als Float-Typ-3 × 2-Array definiert, und in c sind die Nummern Seriennummern (0 bis 4) und als Float-Typ-2 × 2-Array definiert. -Tensorflow verwendet Tensor. Um Tensor zu betreiben, muss tr.Session () definiert werden. Daher funktioniert Tensor in print () vor dem Definieren von tr und Session () nicht und wird als Tensor angezeigt. Nachdem Sie tr.Session () definiert haben, können Sie sehen, dass es mit sess.run (a) funktioniert.

image.png

Überprüfen Sie als Nächstes den Platzhalter. Ein Platzhalter ist ein Bild, das so etwas wie ein Feld definiert, in das Sie später Werte einfügen können. Definiert in tf.placeholder (). Dieses Mal ist es als tf.placeholder definiert ((dtype = tf.float32, shape = [None, 3]). Wie Konstanten funktioniert Tensor nicht ohne definierte Sitzung. Definieren Sie ein zufälliges 2x3-Array mit X = np.random.rand (2,3). Führen Sie Tensor mit sess.run () aus. sess.run(x,feed_dect={x:X[0].reshape(1, -1)}) Ersetzen Sie x durch X [0] durch feed_dict, dh das 0te des X-Arrays. .reshapr (1, -1) transformiert die Form des Arrays in 1x3. In der Definition des Platzhalters ist Form = [Keine, 3] als 〇 × 3 definiert. Es ist eine Umformung (1, -1) und der Teil von 〇 wird auf 1 gesetzt, und -1 ist ein 1 × 3-Array, da dies bedeutet, dass die definierte 3 verwendet wird. Vergewissern Sie sich bei der Überprüfung des Ergebnisses, dass das 0. Array von X zugewiesen ist und es sich um ein 1x3-Array handelt. Der Platzhalter wird verwendet, wenn jeder Stapel während des Lernens ersetzt wird.

image.png

Als nächstes überprüfen wir die Variablen. Variablen ist ein Bild von Variablen. Definiert in tf.variables (). Oben wird es zuerst als 1 definiert. Der Wert der Variablen ändert sich bei der Aktualisierung. Die Aktualisierungsformel lautet calc_op = x * a (Variable x Konstante) Verwenden Sie tf.assign (), um den Wert zu aktualisieren. tf.assign (x, calc_op) ist Der Vorgang des Aktualisierens von x auf den Wert von calc_op. Wenn Sie eine Variable verwenden, müssen Sie zuerst die Variable initialisieren (auf den Anfangswert umschreiben). tf.global_variables_initializer () ist eine Methode zum Initialisieren von Variablen. Im ersten Druck (sess.run (x)) ist der Anfangswert 1, und im zweiten Druck (sess.run (x)) wird er durch update_x auf 10 aktualisiert. Im dritten Druck (sess.run (x)) aktualisiert update_x das zweite x (10) auf 100, was die Multiplikation der Konstanten 10 ist.

Lineare Regression

image.png image.png image.png

Auf lineare Regression prüfen. Bezüglich des Imports wie oben. Zusätzlich wird matplotlib.pyplot implementiert, um das Diagramm anzuzeigen. Iters_num legt die Anzahl der Lernvorgänge fest, und plot_interval legt fest, wie viele Lernvorgänge der Fehler angezeigt wird. Als nächstes Datengenerierung. x wird durch die Zufallszahl np.random.readn (n) erzeugt. Die Zahl ist n, dh es werden 100 Zufallszahlen erzeugt. Einsetzen dieser Zahl in die Formel 3 * x + 2, um d zu erzeugen. Da dieses d nur auf der Geraden von 3 * x + 2 existiert, fügen wir absichtlich Rauschen hinzu und bewegen es von der Geraden auf und ab. Das Lernen wird mit x als Eingabedaten und d als Ausgabedaten durchgeführt. Bisher unterscheidet es sich nicht wesentlich von der Methode zum Generieren mit Numpy.

Ein Platzhalter wird für Eingabe- und Ausgabedaten verwendet. Das Gewicht W und die Vorspannung b werden als variabel definiert, und die Lernformel wird durch Lernen mit y = W * xt + b erhalten. Der Fehler wird aus dem durchschnittlichen quadratischen Fehler berechnet. Berechnen Sie das Quadrat mit tf.square () und den Durchschnitt mit tf.reduce_mean (). Definieren Sie die Lernrate mit tf.tf.train.GradientDescentOptimizer () und Der minimale Fehler wird von optimizer.minimize (Verlust) berechnet. Nachdem die Vorbereitung für das Lernen abgeschlossen ist, werden die Initialisierung der Variablen und die Sitzung gestartet.

Das Lernen wird mit Sätzen durchgeführt. Da iter_num = 300 ist, wird das Lernen 300 Mal ausgeführt. Dies ist eine for-Anweisung, die train mit sess.run aufruft, x_train xt und d_train dt zuweist und bei plot_interval zeichnet. Wenn Sie die Ergebnisse überprüfen, können Sie feststellen, dass die Werte nahe bei W = 3,07, d = 1,94 und d = 3 * x + 2 liegen und die korrekte Vorhersage erfolgt.

[try] ① Ändern Sie den Wert des Rauschens. Implementiert durch Ändern des Geräuschwerts der obigen Übung auf 0,6. image.png Das Obige ist der geänderte Teil. image.png Je größer der Rauschwert ist, desto größer ist die Variation zwischen oben und unten. Als Ergebnis wurde bestätigt, dass das Vorhersageergebnis weniger genau war als bei einem Rauschwert von 0,3. ② Ändern Sie den Wert von d. (1) Ändern Sie W auf 6. image.png Das Obige ist der geänderte Teil. Ergebnis image.png (2) Ändern Sie d in 4 image.png Das Obige ist der geänderte Teil. Ergebnis image.png Es wurde bestätigt, dass sowohl die Ergebnisse von (1) als auch (2) Vorhersagen nahe der Gleichung von d machten. Da die Formen von y und d gleich sind und der Rauschwert, der ein Fehler ist, nicht geändert wird. Es wird angenommen, dass das Ergebnis dem der Übung nahe kam. Aus (1) und (2) ist es notwendig, den Rauschwert der Daten zu kennen, um eine gute Vorhersage zu treffen.

Nichtlineare Regression

image.png image.png image.png Der Import und die Datengenerierung ähneln der linearen Regression. Als nichtlinear unterscheidet sich die Formel von d von der zum Zeitpunkt der linearen Regression. Da die Anzahl der Gewichtsparameter dieses Mal 4 aus der d-Formel beträgt, W = tf.Variable(tf.random_normal([4, 1], stddev=0.01)) Definiert vier Zahlen in. stddev = 0,01 stellt eine Standardabweichung von 0,01 dar und definiert einen zufälligen Anfangswert der Standardabweichung von 0,01. Da xt vier Werte als x3, 2., 1. und 0. hat, haben 4 Platzhalter und d 1 Lösung, so wird 1 Platzhalter vorbereitet. Die Formel lautet y = tf.matmul (xt, W) und y = tf.matmul () ist die Multiplikationsmethode. Der Lernfluss besteht darin, xt und dt auf die gleiche Weise wie bei der linearen Regression durch x_train und d_train zu ersetzen. Es ist ersichtlich, dass die Ergebnisse w1 = -0,4, w2 = 1,59, W3 = -2,80, w4 = 0,99 sind, was nahe an der d-Gleichung liegt. [try] ① Ändern Sie den Rauschwert. Ändern Sie den Geräuschwert auf 0,5, was dem 10-fachen der Übung entspricht image.png Das Obige ist der geänderte Teil. Ergebnis image.png Wie bei der linearen Regression erhöht der Anstieg des Rauschwerts die vertikale Variation. ② Ändern Sie den Wert von d Ändern Sie W ab dem Zeitpunkt des Trainings auf einen geeigneten Wert. image.png Das Obige ist der geänderte Teil. Ergebnis image.png Aus den Ergebnissen wurde bestätigt, dass selbst wenn der Wert von W wie im Fall der linearen Regression geändert wurde, korrekt vorhergesagt wurde, dass der Rauschwert klein war.

Übungsproblem image.png image.png image.png Obwohl das Ergebnis von dem oben erstellten Programm vorhergesagt werden kann, wird nur ein Teil der Punkte aufgezeichnet, da x = np.random.rand (n) ist, wenn die Daten generiert werden und nur Punkte im Bereich von 0 bis 1 genommen werden. Es ist eine Grafik.

mnist image.png image.png Über den Vergütungsteil x = tf.placeholder(tf.float32, [None, 784]) 784 liegt daran, dass der Datensatz 28 × 28 = 784 ist. d = tf.placeholder(tf.float32, [None, 10]) Die Klassifizierung gilt für 10 Klassifizierungen von 0 bis 9. W = tf.Variable(tf.random_normal([784, 10], stddev=0.01)) Da W 10 Werte aus dem Wert von 784 ergibt, hat es eine Form von 784 x 10. Der Anfangswert ist eine Standardabweichung von 0,01 b = tf.Variable(tf.zeros([10])) Für 10 Ausgänge. y = tf.nn.softmax(tf.matmul(x, W) + b) Ersetzen Sie den Wert, der durch Addition von b zur Multiplikation von x und W zur Softmax-Funktion erhalten wird. Der Fehler wird unter Verwendung der Kreuzentropie zur Klassifizierung berechnet. Ein Stapel von Mnist-Zugdaten wird von x_batch und d_batch in der for-Anweisung zugewiesen. Es kann bestätigt werden, dass die Genauigkeit nach 100 mnist-Erkenntnissen auf etwa 87% ansteigt. image.png Überprüfen Sie oben die 0. Daten von d_batdh, die Größe von x_batdh und das Bild.

Mnist in 3 Schichten implementiert. Der Zweck besteht darin, die Genauigkeit im Vergleich zur ersten Schicht zu verbessern. image.png image.png image.png

Da es eine dreischichtige Struktur hat, werden zwei versteckte Schichten (hidden_layer_size_1 = 600, hidden_layer_size_2 = 300) vorbereitet. Dies erzeugt ein neuronales Netzwerk, das 10 von 784 Eingängen über 1 600 verborgene Schichten 2 300 ausgibt. Da es eine dreischichtige Struktur mit einer verborgenen Schicht aufweist, müssen drei Gewichte W und drei Vorspannungen b hergestellt werden. Da sich die Anzahl der Daten im Verlauf der Ebene ändert, muss die Form von W entsprechend der Form geändert werden. Infolgedessen kann bestätigt werden, dass die Genauigkeit etwa 90% beträgt, was höher ist als die der ersten Schicht.

[try] ① Ändern Sie die Größe der ausgeblendeten Ebene Geändert zu hidden_layer_size_1 = 400, hidden_layer_size_2 = 150. image.png Das Obige ist der geänderte Teil. Ergebnis image.png Da die Anzahl der verborgenen Schichten seit dem Zeitpunkt der Übung abgenommen hat, wurde bestätigt, dass die Genauigkeit abgenommen hat. Da die Anzahl der ausgeblendeten Ebenen und die Berechnungszeit (Genauigkeit) in einem Kompromiss stehen, ist jedes Mal eine Anpassung erforderlich. ② Optimierer ändern. Die folgende Abbildung fasst die Genauigkeit zusammen, nachdem Sie zu den folgenden 4 Arten von Optimierern gewechselt und 3000 Mal gelernt haben. image.png Mit einer Genauigkeit von 3000 Lernergebnissen lieferte der RMS Prop Optimizer die besten Ergebnisse. Wenn Sie in der Praxis Vergleiche anstellen, lernen Sie, bis die Genauigkeit ein Plateau erreicht, und führen Sie dann Vergleiche durch.

Klassifizierung mit CNN image.png image.png image.png image.png

Der Fluss von CNN ist conv - relu - pool - conv - relu - pool - Führen Sie in der Reihenfolge affin --relu --dropout --affin --softmax durch. Die Definition von Import und Lernanzahl ist dieselbe wie oben. Weisen Sie dem Platzhalter MNIST-Daten als x zu. Ändern Sie das X in ein 28x28x1-Kanalbildformat und ersetzen Sie es durch x_image. Das 5x5x1x32-Gewicht von W_conb1 5x5 ist die CNN-Filtergröße. 1x32 hat die Bedeutung, 1 Kanal auf 32 Kanäle zu erweitern. Die Berechnung erfolgt durch h_conv1 = tf.nn.relu (tf.nn.conv2d (x_image, W_conv1, Schritte = [1, 1, 1, 1], padding = 'SAME') + b_conv1). In tf.nn.conv2d () wird x_image auf Faltungsoperation mit W_conv1 gesetzt, Schritt ist 1 und Auffüllen ist GLEICH (gleich). Danach wird der Bias b_conv1 hinzugefügt und der ReLU-Funktion zugewiesen. Die Ausgabe, Mit h_pool1 = tf.nn.max_pool (h_conv1, ksize = [1, 2, 2, 1], Schritte = [1, 2, 2, 1], padding = 'SAME') Mit max_pool, ksize und stride 2x2 size wird die Auffüllung auf die gleiche Weise berechnet. Die gleiche Berechnung wird für die zweite und dritte Schicht durchgeführt. Danach kann CNN berechnet werden, indem eine affinrelu --dropout --affin --softmax Operation durchgeführt wird. Es wurde bestätigt, dass die Genauigkeit mit zunehmender Anzahl von Lernprozessen zunahm und dass die Genauigkeit etwa 90% oder mehr betrug. [try] ① Ändern Sie die Abbrecherquote auf 0. image.png Das Obige ist der geänderte Teil. Ergebnis image.png Aus dem Ergebnis ging hervor, dass es ungefähr 95% waren, was fast der Übung entsprach.

Keras Übung

Lineare Regression image.png image.png image.png Das Ergebnis ist eine lineare Regression wie Tensorflow. Der Code ist für Keras einfacher. Funktionen von Keras Im Gegensatz zu Tensorflow müssen W (Gewicht) und b (Bias) keine Platzhalter oder Variablen verwenden. Eingabe x und Lernausdruck d werden auf die gleiche Weise wie Tensorflow definiert. Bereiten Sie als nächstes die Norm Sequential () vor. Dies ist die Basis des linearen Regressionsmodells. Dadurch wird ein dichtes Netzwerk (vollständig verbundene Schicht) erstellt. Dadurch wird ein einschichtiges Netzwerk erstellt. model.summary () ist der Teil, in dem das Modell angezeigt wird, und die Zusammenfassung wird wie in der zweiten Übung oben angezeigt. Wenn Sie dies bestätigen, können Sie bestätigen, dass die Anzahl der Parameter output_Shape1 im vollständig verbundenen 1-Layer-Dence-Netzwerk 2 beträgt. Modelle können einfach durch Definieren in model.compile () erlernt werden. In Tensorflow mussten ioss und optimizer definiert werden. Diesmal model.compile (loss = 'mse', optimizer = 'sgd') Verlust verwendet den quadratischen Fehler und Optimierer verwendet die Methode des versteckten Gradientenabfalls.

Einfaches Perceptron image.png image.png image.png Der Teil, in dem sich der Lerncode im Vergleich zur obigen linearen Regression unterscheidet. In der linearen Regression wurde die for-Anweisung verwendet, diesmal wird das Lernen jedoch mit model.fit () durchgeführt. In model.fit () kann die Anzahl der Lernvorgänge durch Epochen definiert werden. model.fit (X, T, Epochen = 30, model.fit (X, T, Epochen = 30, batch_size = 1)) hat 30 Lernzeiten, und da batch_size = 1 ist, beträgt die Anzahl der Daten 4, also 30 × 4 Trainiere 120 Chargen. Wenn Sie den Code ausführen, wird eine Zusammenfassung angezeigt, und Sie können sehen, dass die Genauigkeit mit zunehmender Anzahl von Lernvorgängen zunimmt. [try] ① Ändern Sie np.random.seed (0) in np.random.seed (1). image.png Das Obige ist der geänderte Teil. Ergebnis image.png image.png Stellen Sie sicher, dass sich das Ergebnis von der obigen Übung unterscheidet, da sich der Anfangswert durch Ändern von np.random.seed (0) auf 1 ändert.

② Ändern Sie die Anzahl der Epochen auf 100 image.png Das Obige ist der geänderte Teil. Ergebnis image.png Da die Anzahl der Batch-Trainings von 120 für Übungen auf 400 für 100 x 4 anstieg, war der Fehler gering und konvergierte.

③ Wechseln Sie zu UND-Schaltung und XOR-Schaltung [1] UND-Schaltung image.png Das Obige ist der geänderte Teil. Ergebnis image.png Es ist ersichtlich, dass die UND-Schaltung ebenfalls gut gelernt ist.

[2] XOR-Schaltung image.png Das Obige ist der geänderte Teil.

Ergebnis image.png Die XOR-Schaltung (exklusive logische Summe) kann nur in einem vollständig gekoppelten Netzwerk von Schichten linear dargestellt werden. Es wurde bestätigt, dass ein Fehler auftritt, weil die Schaltung nicht linear dargestellt werden kann (0 und 1 können nicht durch eine gerade Linie getrennt werden).

④ Ändern Sie die Chargengröße mit einem ODER-Schaltkreis auf 10 image.png Das Obige ist der geänderte Teil. Ergebnis image.png Durch Erhöhen der Stapelgröße auf 10 verringert sich die Anzahl der Lernvorgänge, sodass ersichtlich ist, dass die Berechnungszeit während der Übung schneller als 2 ms ist. Durch Erhöhen der Stapelgröße auf diese Weise kann die Anzahl der Lernvorgänge in einer Epoche verringert werden. Im Allgemeinen ist die Chargengröße ein Vielfaches von 2. Wenn die Anzahl der Daten klein ist, ist die Stapelgröße klein, und wenn die Anzahl der Daten groß ist, wird die Stapelgröße erhöht.

⑤ Ändern wir die Anzahl der Epochen auf 300 image.png Das Obige ist der geänderte Teil. Ergebnis image.png Dies ist dasselbe wie (2), und da die Anzahl der Batch-Schulungen zunimmt, ist der Fehler gering und konvergiert.

Klassifikation der Iris image.png image.png image.png train_test_split klassifiziert Daten in Trainingsdaten und Verifizierungsdaten. Da die Verifizierungsdaten durch train_test_split (x, d, test_size = 0,2) auf 20% festgelegt werden, werden die Trainingsdaten und die Verifizierungsdaten im Verhältnis 4: 1 getrennt. Das Modell ist wie oben definiert. Ein zweischichtiges neuronales Netzwerk über die ReLU-Funktion mit einer Eingangsschichtgröße von 4 und einer Zwischenschichtgröße von 12 sowie eine Softmax-Funktion mit einer Matrixgröße von 3. Verlust ist sparse_categorical_crossentropy Dies liegt daran, dass das Ziel in 0,1,2 unterteilt ist. In Form von one_hot wird kategoriale_entropie verwendet. Wenn die Ergebnisse bestätigt werden, kann bestätigt werden, dass die Genauigkeit durch Durchführen des Trainings verbessert wird und dass die Genauigkeit des Diagramms sowohl für die Trainingsdaten als auch für die Verifizierungsdaten gleich ist.

[try] ① Ändern Sie die Aktivierungsfunktion der mittleren Schicht in Sigmoid image.png Das Obige ist der geänderte Teil. Ergebnis image.png Das Ergebnis ist genauer als die ReLU-Funktion. Dies liegt daran, dass die Irisdaten diesmal einfach sind. Wenn die Daten kompliziert werden, verursacht die Sigmoidfunktion das Verschwinden des Gradienten.

② SGD importieren und Optimierer in SGD ändern (lr = 0.1) image.png Das Obige ist der geänderte Teil. Ergebnis image.png Es ist ersichtlich, dass die Lerngeschwindigkeit und -genauigkeit in einem frühen Stadium 1,0 erreichte, indem SGD (Lernrate höher als die Übung) eingestellt wurde. Mit Keras können Aktivierungsfunktion, Lernrate und Optimierer einfach implementiert und geändert werden.

MNIST-Klassifizierung image.png image.png Importieren Sie Mnist-Daten aus data.mnist. Es ist ein dreischichtiges neuronales Netzwerk mit Eingang 784, Zwischenschichten 512 und 512 und Ausgang 10. Die Relu-Funktion wird in der mittleren Ebene und die Softmax-Funktion in der Ausgabe ausgeführt. Aus den Ausführungsergebnissen ist ersichtlich, dass das Lernen unter Verwendung von 60.000 Bildern in einem Lernen durchgeführt wird.

[try] ① Ändern Sie one_hot_label von load_mnist in False image.png Das Obige ist der geänderte Teil. Ergebnis image.png Das Ergebnis ist eine Fehleranzeige. Da bei one_hot die kategoriale Kreuzentropie verwendet wird, ist der Formfehler des Modells schrecklich.

② Ändern Sie die Fehlerfunktion in sparse_categorical_crossentropy image.png Ändern Sie den obigen Verlust von ①. Ergebnis image.png Es wurde bestätigt, dass, wenn one_hot = False in sparse_categorical_crossentropy geändert wurde, die Operation normal gestartet wurde und die Genauigkeit zum 20. Mal auf etwa 98% anstieg.

③ Ändern Sie den Wert von Adams Argument image.png Das Obige ist der geänderte Teil. Ergebnis image.png Je höher die Lernrate, desto schneller die Berechnungsgeschwindigkeit, aber die Erfahrung war nicht so unterschiedlich. Die Lernrate von 0,001 scheint angemessener zu sein. Ein weiterer Vorteil von Keras ist, dass Sie die Lernrate schnell ändern und vergleichen können.

CNN-Klassifikation von MNIST image.png image.png image.png Ich habe es tatsächlich mit Epoche = 20 betrieben, aber es hat zu lange gedauert, also habe ich es in Epoche = 5 geändert. Da es sich um ein CNN handelt, formen Sie es in 28x28x1 um und definieren Sie input_shape. Mit Keras können Sie die Faltung nur mit Conv2D und MaxPooling2D durchführen. model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape = input_shape)) 32 repräsentiert die Anzahl der Ausgangskanäle und kernel_size = (3, 3) repräsentiert die Filtergröße (3 × 3). Die Anzahl der Epochen beträgt 5, aber die Genauigkeit der Zahlen hat sich auf etwa 98% erhöht.

Lernen mit dem cifar10-Datensatz cifar10 ist ein Satz von 32x32 Pixel Farbbilddaten von 10 Arten von Etiketten "Flugzeug, Auto, Vogel, Katze, Hirsch, Hund, Frosch, Pferd, Schiff, LKW". Die Anzahl der Daten beträgt 60.000, die Anzahl der Trainingsdaten: 50.000, die Anzahl der Testdaten: 10000 image.png image.png image.png Da alle Bilddaten in RGB von 0 bis 255 geschrieben werden, wird eine Normalisierung (geteilt durch 255 und geändert in den Bereich von 0 bis 1) durchgeführt. Das neuronale Netzwerk ist ein Netzwerk, das Conv2D und MaxPooling2D wie das obige CNN verwendet. Das Ergebnis war Überlernen mit einer Lerngenauigkeit von 99% und einer Testgenauigkeit von 65%. Schließlich ist es schwierig, mit Epoche 3 eine gute Genauigkeit zu erzielen.

RNN SimpleRNN, LSTM, GRU usw., die in allen Vorlesungen erläutert wurden, sind auch bei Keras erhältlich. Dieses Mal wird RNN verwendet, um Binärzahlen hinzuzufügen. image.png image.png image.png Zahlen werden in binärer Notation zur Berechnung durch RNN hinzugefügt. Dies liegt daran, dass die 2 neuen Zahlen übernommen werden, wenn die vergangenen Zahlen übernommen werden. Das Modell ist model.add () input_shape = [8, 2] ist 8 Bytes × a und b Daten Die Zeitreihe repräsentiert 8 Elemente. Die Genauigkeit beträgt zum ersten Mal 94% und zum zweiten und nachfolgenden Mal 100%. [try] (1) Ändern Sie die Anzahl der RNN-Ausgangsknoten auf 128 image.png Das Obige ist der geänderte Teil. Ergebnis image.png Die Ausgabeform schwankt aufgrund der Änderung des Ausgabeknotens. Die Genauigkeit beträgt 100%, was kleiner als die während der Fehlerübung ist, und die Genauigkeit wird verbessert.

(2) Ändern Sie die Ausgangsaktivierungsfunktion von RNN in Sigmoid image.png Das Obige ist der geänderte Teil. Ergebnis image.png Es wurde bestätigt, dass das Ergebnis weniger genau war als die Relu-Funktion.

③ Ändern Sie die Ausgangsaktivierungsfunktion von RNN in tanh image.png Das Obige ist der geänderte Teil. Ergebnis image.png Die Genauigkeit war besser als die der Sigmoidfunktion, und das Genauigkeitsergebnis war fast das gleiche wie das der ReLU-Funktion.

④ Ändern Sie die Optimierungsmethode in Adam image.png Das Obige ist der geänderte Teil. Ergebnis image.png Infolgedessen ist ersichtlich, dass der Fehler kleiner als der von SDG ist und die Genauigkeit verbessert wird.

⑤ RNN-Eingang Dropout ist auf 0,5 eingestellt image.png Das Obige ist der geänderte Teil. Ergebnis image.png Ich konnte feststellen, dass die Berechnungsgeschwindigkeit durch Abbruch verbessert wurde. Die Berechnungsgenauigkeit ist jedoch ziemlich schlecht.

⑥ Setzen Sie den rekursiven Dropout von RNN auf 0,3 image.png Das Obige ist der geänderte Teil. Ergebnis image.png Obwohl die Generalisierungsleistung verbessert ist, ist das Ergebnis fast das gleiche wie (5).

⑦ Setzen Sie RNN Unroll auf True Abrollen bezieht sich auf die Bereitstellung eines Netzwerks. Wenn es erweitert wird, konzentriert es sich eher auf den Speicher, andererseits verbessert sich die Berechnungsgeschwindigkeit. image.png Das Obige ist der geänderte Teil. Ergebnis image.png Wie oben erläutert, wurde bestätigt, dass die Berechnungsgeschwindigkeit verbessert wurde. Die Genauigkeit ist etwas höher als ⑤.

So implementieren Sie ein GRU-Netzwerk image.png Sie können ein GRU-Netzwerk implementieren, indem Sie SimpleRNN in model.add in GRU umschreiben.

Lernen stärken

Intensiviertes Lernen: Ein Bereich des maschinellen Lernens, der darauf abzielt, Agenten zu erstellen, die Aktionen in der Umgebung auswählen, damit die Belohnungen langfristig maximiert werden können. Ein Mechanismus zum Bestimmen und Verbessern von Aktionen basierend auf den Belohnungen, die sich aus den Ergebnissen von Aktionen ergeben.

Bestätigungstest (4-19) Betrachten Sie Beispiele, die für das verstärkte Lernen angewendet werden könnten, und listen Sie die Umgebung, Agenten und Belohnungen im Detail auf.

Beispiel: Automatisches Fahren eines Autos Umgebung: Unterwegs, Agent: Fahrer, Belohnung: Beschleuniger / Bremse / Griffbetrieb, Belohnung: Sicheres Fahren

Der Kompromiss zwischen Exploration und Nutzung Wenn Sie die Daten (Kenntnisse) haben, die Sie gewinnen können, wenn Sie dies in dieser Szene mit Othello oder Go tun, können Sie die Aktion vorhersagen und entscheiden. Es gibt keine Daten darüber, wie das Lenkrad gedreht werden muss, um sicher zu fahren, wie im Fall eines Autos im obigen Beispiel. Daher wird beim Verstärkungslernen angenommen, dass die Daten unvollständig sind, und die Daten werden während des Handelns gesammelt und die optimale Maßnahme wird von dort aus ergriffen.

Wenn Sie also nur mit den vergangenen Daten handeln, können Sie nicht suchen, und wenn Sie nur die Daten erfassen, können Sie die vergangenen Daten nicht verwenden, was eine Kompromissbeziehung darstellt. Intensivierungslernen erfordert eine angemessene Koordination von Exploration und Nutzung.

Unterschied zwischen verbessertem Lernen und Lernen mit / ohne Lehrer Beim überwachten und unbeaufsichtigten Lernen besteht das Ziel darin, Datenmuster zu finden und vorherzusagen. Beim intensiven Lernen ist das Ziel, ein besseres Belohnungsverhalten zu finden. Die Ziele sind unterschiedlich.

Aktionswertfunktion Es gibt zwei Typen, die Statuswertfunktion und die Aktionswertfunktion. Es ist die Zustandswertfunktion, die sich auf den Wert eines bestimmten Zustands konzentriert, und die Aktionswertfunktion, die sich auf den Wert konzentriert, der Zustand und Wert kombiniert.

Richtlinienfunktion Es ist eine Funktion, die die Wahrscheinlichkeit angibt, welche Art von Maßnahmen in einem bestimmten Zustand beim politikbasierten Lernen zur Stärkung ergriffen werden müssen.

Richtliniengradientenmethode Techniken zur Modellierung und Optimierung von Strategien Es gibt durchschnittliche Belohnungs- und Rabattbelohnungssummen als Definitionsmethode.

i.png

Recommended Posts

Report_Deep Learning (Teil 2)
Report_Deep Learning (Teil 1)
Report_Deep Learning (Teil 1)
Report_Deep Learning (Teil 2)
Python: Überwachtes Lernen: Hyperparameter Teil 1
Python: Überwachtes Lernen: Hyperparameter Teil 2
[PyTorch Tutorial ⑤] PyTorch anhand von Beispielen lernen (Teil 2)
Versuchen Sie es mit TensorFlow Part 2
[PyTorch Tutorial ⑤] PyTorch anhand von Beispielen lernen (Teil 1)
Echtzeit-Persönliche Schätzung (Lernen)
Datum / Uhrzeit Teil 1
Vorhersage des Strombedarfs durch maschinelles Lernen Teil 2
numpy Teil 1
Argparse Teil 1
Lernaufzeichnung
Lernrekord Nr. 3
Lernrekord Nr. 1
Maschinelles Lernen
Python lernen
Python: Geschlechtsidentifikation (Entwicklung von Deep Learning) Teil 1
Python: Geschlechtsidentifikation (Entwicklung von Deep Learning) Teil 2
Lernrekord Nr. 2
numpy Teil 2
6/10 Lerninhalte
Tiefes Lernen
Numpy-Sigmoid-Lernen
"Deep Learning from Grund" Memo zum Selbststudium (Teil 12) Deep Learning
EV3 x Pyrhon Maschinelles Lernen Teil 3 Klassifizierung
Maschinelles Lernen eines jungen Ingenieurs Teil 1
Klassifizierung von Gitarrenbildern durch maschinelles Lernen Teil 1
Grundlagen des Lernens mit einem Lehrer Teil 1 - Einfache Regression - (Hinweis)
Maschinelles Lernen beginnend mit Python Personal Memorandum Part1
Lernen der Mustererkennung im Video Teil 1 Bereich der Mustererkennung
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung Teil 2
EV3 x Pyrhon Maschinelles Lernen Teil 1 Umgebungskonstruktion
EV3 x Python Maschinelles Lernen Teil 2 Lineare Regression
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung Teil 3
Videorahmeninterpolation durch tiefes Lernen Teil 1 [Python]
Aktienkursprognose mit Deep Learning (TensorFlow) -Teil 2-
Maschinelles Lernen eines jungen Ingenieurs Teil 2
Klassifizierung von Gitarrenbildern durch maschinelles Lernen Teil 2
Versuchen Sie Katsuhiro Morishita / Aso_Sea_Clouds_Pridiction Memo-Excluding the learning part-
Grundlagen des Lernens mit einem Lehrer Teil 3 - Multiple Regression (Implementierung) - (Anmerkungen) -