[PYTHON] Deep Learning durch Implementierung 1 gelernt (Return Edition)

Erstes tiefes Lernen

Einführung

Ich kam zum ersten Mal mit Deep Learning in Kontakt, als ich in meinem dritten Jahr der Grundschule war, und es scheint, dass es in meinen Grundschulklassen nur wenige Vorlesungen über Deep Learning gab. Es gibt viele Dinge, die ich selbst im Bereich Deep Learning erforscht habe, aber ich habe die Schritte aufgegriffen, die ich unternommen habe, um die interne Struktur des Deep Learning zu verstehen und umzusetzen, und sie in meinem Blog veröffentlicht. Zieh es an. Außerdem schreibe ich zum ersten Mal einen Blog und es ist ein Übungsartikel, daher scheint es schwierig zu sein, ihn zu lesen. Bitte entschuldigen Sie.

Was ist tiefes Lernen?

Zunächst werde ich erklären, was Deep Learning vor der Implementierung bewirkt. Deep Learning ist kurz gesagt Funktionsoptimierung. Wenn Sie eine Funktion optimieren, die ein Bild als Eingabe verwendet und die Wahrscheinlichkeit angibt, dass es sich bei dem Bild um eine Katze handelt, wird es zu einem Klassifikator, der das Bild in Katzen und andere klassifiziert, und zu einer Funktion, die $ x $ als Eingabe verwendet und $ sin (x) $ ausgibt. Wenn Sie optimieren, spricht man von einem Regressionsmodell. Zunächst werden wir eine Regression implementieren, um zu erkennen, dass Deep Learning eine Funktionsoptimierung ist.

Umweltvereinbarung

Wenn Sie einen PC und eine Internetumgebung haben, haben Sie alles, was Sie für tiefes Lernen benötigen. Wenn Sie das von Google bereitgestellte Google Colaboratory verwenden, verfügen Sie über alle erforderlichen Bibliotheken. Verwenden Sie diese (es ist zu einer praktischen Welt geworden). Google Cola Boratory kann durch Drücken einer neuen Schaltfläche von Google Drive aus anderen ausgewählt werden. Beim Öffnen wird das Jupiter-Notizbuch geöffnet und sofort eine interaktive Umgebung konfiguriert.

Implementierung der Regression (Vorhersage von y = sin (x))

Ich denke, es ist einfacher zu verstehen, wenn Sie darüber diskutieren, während Sie sich ansehen, was es implementiert und funktioniert. Implementieren Sie also zuerst das Regressionsmodell. Fügen wir zunächst den folgenden Code ein.

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0,20,0.1)
y = np.sin(x)
plt.plot(x,y)

Wenn ich das mache, denke ich, wird die Sinuskurve als Grafik angezeigt. Dies ist die Bibliothek, mit der matplotlib Tabellen gezeichnet hat, und ich werde diese Bibliothek von nun an häufig verwenden. Bis zu diesem Zeitpunkt wurden Trainingsdaten generiert. Reelle Zahlen von 0 bis 20 in Schritten von 0,1 und ihre Sünden.

Definieren Sie als Nächstes das Modell.


from keras import layers
from keras import models
from keras import optimizers
model = models.Sequential()
model.add(layers.Dense(256,activation = "relu",input_shape=(1,)))
model.add(layers.Dense(256,activation = "relu"))
model.add(layers.Dense(256,activation = "relu"))
model.add(layers.Dense(256,activation = "relu"))
model.add(layers.Dense(256,activation = "relu"))
model.add(layers.Dense(256,activation = "relu"))
model.add(layers.Dense(256,activation = "relu"))
model.add(layers.Dense(1))
model.compile(loss = "mse",optimizer="adam")

Hier habe ich aus der Keras-Bibliothek importiert, was ich brauchte. Das Modell zeigt, wie diesmal eine Funktion erstellt wird, und obwohl es verschiedene Möglichkeiten gibt, sie zu beschreiben, wird Sequential () auf leicht verständliche Weise verwendet. Sie können hier sehen, dass wir dem Modell viele Ebenen hinzufügen. Dieses Mal verwende ich viele Ebenen. Dichte, aber ich werde erklären, was das ist.

Vollständig verbundene Schicht

Wie Sie in der Unterüberschrift sehen können, empfängt Layers.Dense den Vektor in der vollständig verbundenen Ebene und gibt den Vektor zurück. Ich denke, es gibt viele Dinge, die 256 als Argument nehmen, aber so viele Dimensionen sollte die Ausgabe haben. Beispielsweise ist die Eingabe n-dimensionales x, die Ausgabe ist m-dimensionales y und die vollständig verbundene Schicht wird durch die folgende Gleichung ausgedrückt.

y = Ax+b

Dabei ist A eine n * m-Matrix und b ein m-dimensionaler Vektor. Woher kommt diese Matrix und dieser Vektor? Wir haben sie alle als Variablen und optimieren sie später. Mit anderen Worten, dies ermöglicht es, jede lineare Transformation zu reproduzieren.

Aktivierungsfunktion

Es stellt sich heraus, dass das obige Modell versucht, $ y $ durch mehrmaliges Anwenden linearer Transformationen zu erhalten, aber mehrere lineare Transformationen können mit einer linearen Transformation reproduziert werden. In diesem Fall ist es sinnlos, viele vollständig verbundene Schichten zu stapeln. Was dabei herauskommt, ist eine Aktivierungsfunktion, die eine nichtlineare Abbildung ist. Es führt eine nichtlineare Abbildung auf alle Werte des Vektors durch. Indem dies zwischen den vollständig verbundenen Ebenen gebissen wird, erhöht sich die Ausdrucksfähigkeit des gesamten Modells, wenn die Ebenen gestapelt werden. Der gesamte Code verwendet Relu. Dies ist $ max (0, x) $, was sicherlich nicht linear ist. Dieses Relu wird häufig im Bereich des tiefen Lernens verwendet.

Optimierung

Eine große Anzahl interner Variablen ($ A und b $) wird verwendet, um beliebige lineare Transformationen in der vollständig verbundenen Schicht darzustellen. Wie diese optimiert werden, wird in model.compile beschrieben. Verlust ist ein Index, dessen Wert kleiner wird, wenn er optimal wird, und diesmal verwenden wir mse (mittlerer quadratischer Fehler). Das heißt, es ist das Quadrat der Differenz zwischen dem vorhergesagten Wert und dem korrekten Wert. Parameter können nicht einfach durch Berechnung des Verlusts des aktuellen Modells optimiert werden. Sie müssen berechnen, um wie viel Sie die Parameter in welche Richtung bewegen sollten, um den Verlust zu verringern. Grundsätzlich reicht es aus, den Gradienten des Parameters zu senken, aber unter dem Gesichtspunkt der Stabilisierung und Beschleunigung ist Adam, der die quadratische Differenzierung und den Gradienten im vorherigen Schritt anstelle des einfachen Gradienten verwendet, für tiefes Lernen ziemlich optimal. Es wird gesagt, dass es gut für die Konvertierung ist.

Ausbildung

Lass uns tatsächlich trainieren.

hist=model.fit(x,y,steps_per_epoch=10,epochs = 10)

Im Training sind die Trainingsdaten oft sehr groß, so dass es oft nicht möglich ist, den Gradienten mit allen Trainingsdaten in einem Lernprozess zu senken (Parameteranpassung), sodass ein Stapel mit kleineren Trainingsdaten verwendet wird. Dieses Mal werden die gesamten Trainingsdaten in 10 geteilt (setps_per_epoch = 10). Mit anderen Worten, 2, die 10-mal den Gradienten von diesen Daten heruntergehen, sind eine Epoche (entsprechend der Häufigkeit, mit der die gesamten Trainingsdaten in der Lerneinheit geleckt wurden), und diesmal das Training, um die gesamten Trainingsdaten 10-mal zu lecken Ich lasse dich.

Prognose

Lassen Sie uns vorhersagen.

test_x = x + 0.05
acc_y = np.sin(test_x)
pre_y = model.predict(test_x)
plt.plot(test_x,acc_y)
plt.plot(test_x,pre_y)
plt.show()

Auf diese Weise erhalten Sie eine Vorstellung davon, wie stark sich das Modell für Daten, die in x-Richtung um 0,05 von den Trainingsdaten abweichen, wie sin (x) verhält. Wenn Sie es so bewegen, wie es ist, sieht es so aus. 10_10.png

Der Wert ist bei $ x> 10 $ weit entfernt.

Indem Sie das Modell selbst verbessern und mehr trainieren, können Sie es wie unten gezeigt verbessern. Probieren Sie es also aus.

30_30.png

GPU Wenn Sie ein Modell benötigen, dessen Erlernen lange dauert, oder wenn Sie eine lange Einarbeitungszeit benötigen, gehen Sie zu Bearbeiten-> Notebook-Einstellungen und ändern Sie den Hardwarebeschleuniger in Google Colaboratory von Keine auf GPU. Das Training sollte früh mit der Leistung der GPU enden.

abschließend

Diesmal wurde die Sinuskurve nur durch lineare Transformation und Relu ausgedrückt. Zusätzlich zur Sinuskurve kann Deep Learning beliebige Funktionen von der Bilderkennung bis zur Bilderzeugung approximieren, sodass die Möglichkeiten endlos sind. Das nächste Mal möchte ich die Faltungsschicht erklären, indem ich die Bilderkennung und die solide, aber mnistische handschriftliche Zeichenerkennung in einer möglichst kurzen Zeile implementiere.

Recommended Posts

Deep Learning durch Implementierung 1 gelernt (Return Edition)
Deep Learning 2 durch Implementierung gelernt (Bildklassifizierung)
Tiefes Lernen durch Implementierung gelernt ~ Erkennung von Abnormalitäten (Lernen ohne Lehrer) ~
Tiefes Lernen durch Implementierung (Segmentierung) ~ Implementierung von SegNet ~
Tiefes Lernen der Verstärkung 2 Implementierung des Lernens der Verstärkung
Deep Learning Bilderkennung 2 Modellimplementierung
Tiefes Lernen
Othello-Aus der dritten Zeile von "Implementation Deep Learning" (3)
Produzieren Sie wunderschöne Seekühe durch tiefes Lernen
Objekterkennung durch tiefes Lernen, Keras tief zu verstehen
Othello-Aus der dritten Zeile von "Implementation Deep Learning" (2)
Starten Sie Deep Learning
Python Deep Learning
Deep Learning × Python
Deep Learning von Grund auf neu - Kapitel 4 Tipps für die in Python erlernte Theorie und Implementierung von Deep Learning
[Lernnotiz] Deep Learning von Grund auf ~ Implementierung von Dropout ~
99,78% Genauigkeit bei tiefem Lernen durch Erkennen von handgeschriebenem Hiragana
Paralleles Lernen von Deep Learning durch Keras und Kubernetes
Implementierung eines Deep Learning-Modells zur Bilderkennung
Erstes tiefes Lernen in C # - Einführung in Python implementieren-
Deep Learning von Grund auf neu Die Theorie und Implementierung des mit Python erlernten Deep Learning Kapitel 3
Erstes tiefes Lernen ~ Kampf ~
Aktieninvestitionen durch tiefgreifendes Lernen (Policy Gradient Method) (1)
Python: Deep Learning-Praxis
Deep Learning / Aktivierungsfunktionen
Erkennung abnormaler Werte durch unbeaufsichtigtes Lernen: Maharanobis-Distanz (Implementierung)
Logistische Regression beim maschinellen Lernen
[Erkennung von Abnormalitäten] Erkennen Sie Bildverzerrungen durch Fernunterricht
Deep Learning 1 Übung des Deep Learning
Deep Learning / Cross Entropy
Erstes tiefes Lernen ~ Vorbereitung ~
Erstes tiefes Lernen ~ Lösung ~
[AI] Deep Metric Learning
Lineare Regression des maschinellen Lernens
Ich habe versucht, tief zu lernen
Othello ~ Aus der dritten Zeile von "Implementation Deep Learning" (4) [Ende]
Klassifizieren Sie Anime-Gesichter durch Fortsetzung / Deep Learning mit Keras
Python: Deep Learning Tuning
[Für Anfänger im Deep Learning] Implementierung einer einfachen binären Klassifizierung durch vollständige Kopplung mit Keras
Deep Learning Großtechnologie
Lernen mit einem Lehrer (Rückkehr) 1 Grundlagen
Python: Überwachtes Lernen (Rückkehr)
Deep Learning / Softmax-Funktion
Rank Learning über ein neuronales Netzwerk (RankNet-Implementierung von Chainer)
"Lernen Sie, während Sie machen! Entwicklung tiefes Lernen von PyTorch" auf Colaboratory.
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 7 Regressionsanalyse
Grundlegendes Verständnis der Tiefenschätzung mit einer Monokamera (Deep Learning)
Erstellen Sie eine KI, die Zuckerbergs Gesicht mit tiefem Lernen identifiziert learning (Datenlernen)
Selbstgesteuertes Lied durch tiefes Lernen (gestapelte LSTM-Ausgabe) [DW Tag 6]
Deep Python hat von DEAP gelernt
Maschinelles Lernen mit Pokemon gelernt
Deep Learning von Grund auf 1-3 Kapitel
Versuchen Sie es mit TensorFlow
Deep Learning Gaiden ~ GPU-Programmierung ~
<Kurs> Tiefes Lernen: Day2 CNN
Deep Learning Bilderkennung 1 Theorie
[Lernen stärken] Tracking durch Multi-Agent
Deep Learning / LSTM Scratch Code
<Kurs> Tiefes Lernen: Tag 1 NN
Deep Kernel Learning mit Pyro