Dies ist eine Fortsetzung von Python-Anfänger berühren Pytorch (2). Ich persönlich schreibe dreimal einen Artikel. Abschließend erkläre ich das neuronale Netzwerk, das mich dazu inspiriert hat, Pytorch zu berühren.
In der Abbildung sehen Sie, warum es als Netzwerk bezeichnet wird. Der Knoten hat übrigens die Form eines Kreises, und die Verknüpfung verbindet die durch die Pfeile dargestellten Knoten.
"Deep Learning", das in den letzten Jahren ein heißes Thema geworden ist, ist ein Stapel von "Zwischenschichten (zwei Schichten dazwischen)" </ strong> in dieser Abbildung. Dieses Modell wird auch als hierarchisch </ strong> </ font> bezeichnet. Es gibt auch ein Modell namens rekursiv (RNN) </ strong> </ font>. Bitte sehen Sie das Bild unten. Dies ist gut im Lernen, das Zeitreihen hält. Der Rechenaufwand ist jedoch groß, was die Berechnung schwierig macht.
Das Folgende ist ein Vergleich beider Netzwerke. Sie sollten das Netzwerk entsprechend der Anwendung auswählen, die Sie lösen möchten. Übrigens wird häufig der hierarchische Typ </ strong> für die Bilderkennung und der rekursive Typ </ strong> häufig für die Verarbeitung natürlicher Sprache (Zeichenerkennung, Spracherkennung) verwendet.
Das Gewicht repräsentiert die Wichtigkeit der Eingabe. Wenn das Gewicht hoch ist, ist der Teil mit dem hohen Gewicht von großer Bedeutung für die Unterscheidung des Ereignisses, das ein neuronales Netzwerk ist.
Lassen Sie uns anhand eines konkreten Beispiels etwas tiefer in die Gewichte eintauchen. Zum Beispiel denke ich, dass es beim Kauf einer Tasche für jede Person etwas Wichtiges gibt, zu entscheiden (zu bestimmen), ob sie kauft oder nicht. Grob gesagt gibt es "Haltbarkeit", "Kapazität", "Design", "Namenserkennung" und so weiter. Da ich dem Design große Bedeutung beimesse, ist, wenn jedes Gewicht numerisch ausgedrückt wird, "Element" = Gewicht: "Haltbarkeit" = 5, "Kapazität = 5", "Design = 8", " Vertrautheit = 5 "</ font>. Da Design von größter Bedeutung ist, ist es natürlich, dass das Gewicht des Designs hoch ist.
Lassen Sie es uns in einem Diagramm zeigen.
Das Diagramm ist leicht zu verstehen und einfach. In dieser Abbildung sehen Sie, dass "Eingabe 1" ein wichtiges Element in dieser Ebene ist. Wenn die nächste Eingabeebene zunimmt, nimmt auch die Anzahl der Gewichte entsprechend zu. Wenn Sie sich die Abbildung ansehen, sehen Sie, dass unterschiedliche Nummern an die beiden nächsten Ebenen übergeben werden.
Übrigens heißt es Vorwärtsausbreitung </ font>, dass sich die Eingabe in dieser Reihenfolge ausbreitet (überträgt).
In dem neuronalen Netzwerk wird jedes Gewicht durch "Training" korrigiert, um das geeignete Gewicht zu finden. Diesmal gibt es also kein Problem, wenn Sie das Gewicht verstehen können. Als nächstes werde ich die unbekannte Funktion "Aktivierungsfunktion" erklären.
Als berühmte Aktivierungsfunktion
es gibt. Bitte überprüfen Sie die Funktion selbst. Es mag schwierig erscheinen, nur mathematische Formeln zu verwenden, aber was für die Aktivierungsfunktion wichtig ist, ist nicht die Schwierigkeit mathematischer Formeln. 1. Nicht linear, 2. Leicht zu unterscheiden </ font>. Nichtlinear bedeutet, dass es nicht gerade ist. Schauen wir uns das Diagramm der ReLU-Funktion an. Es ist auf Wikipedia aufgeführt. [Aktivierungsfunktion (Wikipedia)](https://ja.wikipedia.org/wiki/%E6%B4%BB%E6%80%A7%E5%8C%96%E9%96%A2%E6%95% B0 # ReLU% EF% BC% 88% E3% 83% A9% E3% 83% B3% E3% 83% 97% E9% 96% A2% E6% 95% B0% EF% BC% 89)
Was denken Sie. Sicher war es nicht linear. Als nächstes kommt die Leichtigkeit der Differenzierung. Informationen zu den Grundlagen der Differenzierung finden Sie in Vorheriger Artikel sowie in Websites und Büchern, die professionellere Erklärungen enthalten. Die einfache Unterscheidung erleichtert das Netzwerktraining und das Auffinden von Gewichten. (Wenn Sie ein neuronales Netzwerk mithilfe eines Frameworks erstellen, machen Sie sich keine Sorgen, da das Programm dies automatisch ausführt.)
Als nächstes lernen wir, wann wir die Aktivierungsfunktion verwenden müssen. Der Zeitpunkt für die Verwendung der Aktivierungsfunktion ist unmittelbar vor </ font>, der sich vorwärts ausbreitet und an die nächste Schicht übertragen wird.
Was bedeutet es, ein neuronales Netzwerk mit einer Aktivierungsfunktion flexibler zu machen? Lassen Sie uns dies auch in der Abbildung überprüfen. Erstens, wenn ein neuronales Netzwerk normalerweise linear aufgebaut wird, ohne eine Aktivierungsfunktion einzufügen und zu unterscheiden
Nicht alle Objekte sind ordentlich unterteilt, auch wenn sie unterschieden werden. So wie wir Menschen Dinge verwechseln, die leicht zu verstehen sind, können Dinge mit ähnlicher künstlicher Intelligenz fälschlicherweise identifiziert werden. Fügen wir eine Aktivierungsfunktion hinzu und konvertieren sie nicht linear Das Diagramm sieht etwas zu gut aus, aber Sie können die Breite der Unterscheidung wie folgt ändern. Es gibt keine Garantie dafür, dass es möglich ist, ein korrektes Urteil zu fällen, aber es besteht zumindest kein Zweifel daran, dass sich die richtige Antwortrate im Vergleich zum linearen Bleiben ändert.
import torch
import torch.nn as nn
import torch.nn.functional as F
Importieren Sie zunächst die erforderlichen Module. Als nächstes werden wir ein Netzwerk aufbauen. Das Netzwerk, das dieses Mal aufgebaut werden soll, ist übrigens so.
class Net(nn.Module):
def __init__(self):
super(Net,self).__init__()
self.fc1 = nn.Linear(2,4)
self.fc2 = nn.Linear(4,4)
self.fc3 = nn.Linear(4,1)
def forword(self,x):
y = F.relu(self.fc1(x))
y = F.relu(self.fc2(y))
y = self.fc3(y)
return y
In Pytorch bauen wir ein neuronales Netzwerk auf, sodass das Netzwerk definiert und dann von einer Funktion aufgerufen wird. Es ist ein sogenannter dynamischer Graph (durch Ausführen definieren). Im Vergleich zu TensorFlow (einem von Google entwickelten Framework) habe ich das Gefühl, dass die Python-Ähnlichkeit erhalten bleibt und leicht zu verstehen ist.
Ich werde den Code erklären. Class Net wird mit dem Modul nn.Module </ strong> von Pytorch erstellt. Wir werden dieses nn.Modelu verwenden, um das Diagramm zu definieren. Erstellen Sie zunächst def \ __ init \ __ (self) durch Initialisierung und rufen Sie \ __ init \ __ von nn.Module auf. Erstellen Sie danach eine Ebene mit self (Name der Ebene). Diesmal wie im Bild erklärt
Netzwerkkonfiguration.
Im Programm self. (Layername) = nn.Linear (Anzahl der Eingänge, Anzahl der Ausgänge) </ strong>
Lass uns schreiben. nn.Linear </ strong> ist ein Modul namens , das vollständig verbunden ist </ font> und zum Erstellen eines Diagramms verwendet wird, in dem sich die Knoten der Eingabeebene auf alle Knoten der nächsten Ebene ausbreiten. ..
Die Vorwärtsfunktion beschreibt das Verhalten des neuronalen Netzwerks bei einer tatsächlichen Eingabe. Geben Sie in der ersten Zeile das Argument "x" in der ersten Ebene ein und führen Sie die Aktivierungsfunktion ReLU aus. Die zweite Zeile gibt den Ausgang "y" der ersten Schicht in die zweite Schicht ein und wendet die ReLU-Funktion an. Geben Sie schließlich die letzte Ebene ein und geben Sie das Ausgabeergebnis zurück.
Schauen Sie sich die Netzwerkübersicht an
net = Net()
print(net)
Net(
(fc1): Linear(in_features=2, out_features=4, bias=True)
(fc2): Linear(in_features=4, out_features=4, bias=True)
(fc3): Linear(in_features=4, out_features=1, bias=True)
)
Sie können bestätigen, dass das Netzwerk fest aufgebaut wurde.
Übrigens können Sie auch den Anfangswert der Netzwerkgewichtung sehen.
for param_tensor in net.state_dict():
print(param_tensor, "\t", net.state_dict()[param_tensor].size())
fc1.weight torch.Size([4, 2])
fc1.bias torch.Size([4])
fc2.weight torch.Size([4, 4])
fc2.bias torch.Size([4])
fc3.weight torch.Size([1, 4])
fc3.bias torch.Size([1])
Hier gibt es eine "Vorspannung", die als Vorspannung bezeichnet wird und zur Berechnung jeder Schicht hinzugefügt wird.
2x+3
Die "3" in der obigen linearen Funktion ist die Vorspannung. In mathematischen Begriffen handelt es sich um einen Abschnitt </ strong>.
Das nächste Mal werde ich die diesmal erlernte Methode zum Aufbau eines neuronalen Netzwerks verwenden, um ein praktischeres neuronales Netzwerk aufzubauen. Insbesondere werden wir die "ODER-Schaltung" und "UND-Schaltung" der Logikschaltung mit einem neuronalen Netzwerk lösen. Vielen Dank für das Lesen bis zum Ende.
Recommended Posts