Diese Reihe ist als Zusammenfassung des Lernens für PyTorch, Pythons Framework für maschinelles Lernen, geschrieben. Dieses Mal habe ich eine Zusammenfassung der Grundlagen von PyTorch geschrieben. Es mag schwierig sein, als Lesematerial zu lesen, weil ich versuche, die Hauptpunkte zu schreiben, anstatt sie zu vermitteln, aber ich hoffe, dass Sie sie zum Verständnis der Punkte verwenden können.
Wie bereits erwähnt, ist PyTorch das Framework für maschinelles Lernen von Python. Apropos Framework für maschinelles Lernen: TensorFlow wurde von Google, Keras oder Chainer entwickelt. Persönliche Subjektivität ist enthalten, aber wenn Sie diese grob aufteilen, sieht es wie folgt aus.
Rahmen | Hauptmerkmale |
---|---|
TensorFlow, Keras | Für die Industrie |
PyTorch, Chainer | Für die Forschung (hochgradig anpassbar) |
Ich denke auch, dass die meisten Leute von TensorFlow kommen werden, wenn sie mit maschinellem Lernen beginnen wollen, aber eine etwas ungewöhnliche Regel, die die Definition und Ausführung der Datenstruktur `define and run``` separat beschreibt. Aus diesem Grund denke ich, dass einige Leute möglicherweise nicht damit vertraut sind und ausblenden. Auf der anderen Seite verwenden PyTorch und Chainer
`define by run```, sodass Sie es auf die gleiche Weise codieren können wie den Python-Code, den Sie normalerweise codieren. Es ist also vertraut (obwohl es mir gefällt). Ist eine Funktion.
Der Mechanismus "Definieren und Ausführen", der etwas schwierig zu handhaben ist, scheint jedoch Vorteile wie eine einfache Optimierung und eine schnellere Berechnungsgeschwindigkeit um den zuvor definierten Betrag zu haben. Es gibt Vor- und Nachteile.
Werfen wir einen Blick auf den Inhalt von PyTorch.
PyTorch hat die folgende Struktur.
Inhalt | Erläuterung |
---|---|
torch | Tensor und verschiedene mathematische Funktionen sind in diesem Paket im Hauptnamespace enthalten.Es ahmt die Struktur von NumPy nach |
torch.autograd | Enthält Funktionen zur automatischen Differenzierung. Automatische Differenzierung ein/Aktivieren Sie den Kontextmanager zum Ausschalten_grad/no_Beinhaltet grad und Function, die Basisklasse, die beim Definieren eindeutiger differenzierbarer Funktionen verwendet wird. |
torch.nn | Verschiedene Datenstrukturen und Schichten zum Aufbau eines neuronalen Netzwerks werden definiert. Beispielsweise sind auch Aktivierungsfunktionen wie Convolution, LSTM und ReLU sowie Verlustfunktionen wie MSELoss enthalten. |
torch.optim | Ein Parameteroptimierungsalgorithmus, der sich auf den probabilistischen Gradientenabstieg (SGD) konzentriert, ist implementiert |
torch.utils.data | Enthält Dienstprogrammfunktionen zum Erstellen von Mini-Batch beim Drehen iterativer SGD-Berechnungen |
torch.onnx | ONNX(Open Neural Network Exchange)[^1]Dient zum Exportieren des Modells im Format. |
[^ 1]: Format für den Austausch von Modellen zwischen verschiedenen Deep-Learning-Frameworks
Es gibt verschiedene Möglichkeiten, einen Tensor zu generieren.
Erzeugung von Tensor
import numpy as np
import torch
#Erstellt durch Übergeben einer verschachtelten Liste
t = torch.tensor([[1, 2], [3, 4]])
#Erstellen Sie einen Tensor auf der GPU, indem Sie das Gerät angeben
t = torch.tensor([[1, 2], [3, 4]], device = "cuda:0")
#Erstellen Sie einen Tensor mit doppelter Genauigkeit, indem Sie dtype angeben
t = torch.tensor([[1, 2], [3, 4]], dtype = "torch.float64")
# 0~Eindimensionaler Tensor mit einer Zahl von 9 initialisiert
t = torch.arange(0, 10)
#Erstellen Sie einen 100x100-Tensor mit allen Werten 0 und übertragen Sie ihn mit der to-Methode auf die GPU
t = torch.zeros(100,100).to("cuda:0")
#100x100 zufälliger Tensor
t = torch.random(100, 100)
Tensor kann leicht in NumPys ndarray umgewandelt werden. Tensor auf der GPU kann jedoch nicht so konvertiert werden, wie es ist, und es ist erforderlich, ihn einmal in die CPU zu verschieben.
Tensorumwandlung
#Mit der Numpy-Methode in ndarray konvertieren
t = torch.tensor([[1, 2], [3, 4]])
nd_arr = t.numpy()
#Bewegen Sie den Tensor auf der GPU zur CPU
t = torch.tensor([[1, 2], [3, 4]], device = "cuda: 0")
t_cpu = t.to("cpu")
nd_arr = t_cpu.numpy()
#Füllen Sie weiter oben aus
t = torch.tensor([[1, 2], [3, 4]], device = "cuda: 0")
nd_arr = t.to("cpu").numpy()
Wie ndarray unterstützt auch Tensor die Indizierungsoperation [^ 2]. Folgende Methoden können angegeben werden.
[^ 2]: Zum Abrufen oder Ändern des Werts eines Arrays durch Angabe eines Index
[^ 3]: Ein Array mit der gleichen Größe wie das ursprüngliche Array, wobei jedes Element im Array auf True / False gesetzt ist.
Tensor-Indizierungsoperation
t = torch.tensor([[1, 2, 3], [4, 5, 6]])
#Angegeben durch skalaren Index
t[0, 2] # tensor(3)
#Angegeben durch Scheibe
t[:, :2] # tensor([[1, 2], [4, 5]])
#In der Liste der Indizes angegeben
t[:, [1, 2]] # tensor([[2, 3], [5, 6]])
#Verwenden Sie das Maskenarray, um nur Teile auszuwählen, die größer als 3 sind
t[t > 3] # tensor([4, 5, 6])
# [0, 1]Element durch 100 ersetzen
t[0, 1] = 100 # tensor([[1, 100, 3], [4, 5, 6]])
#Massenzuweisung mit Slices
t[:, 1] = 200 # tensor([[1, 200, 3], [4, 200, 6]])
#Ersetzen Sie nur Elemente mit bestimmten Bedingungen mithilfe eines Maskenarrays
t[t > 10] = 20 # tensor([[1, 2, 3], [4, 5, 6]])
Tensor kann Operationen mit vier Regeln, mathematische Funktionen, lineare algebraische Berechnungen und mehr ausführen. Obwohl dies mit ndarray möglich ist, weisen lineare algebraische Berechnungen wie das Matrixprodukt und die Singularwertzerlegung [^ 4] eine bessere Leistung auf als die Verwendung von NumPy / SciPy, insbesondere für große Datenmengen, da GPU verwendet werden kann. Es gibt viele.
[^ 4]: Singular Value Decomposition (SVD) ist eine Berechnung, die häufig in der linearen Algebra verwendet wird und die Matrix A in das Produkt von drei Matrizen wie USV zerlegt.
U und V sind orthogonale Matrizen, und S ist eine quadratische Matrix mit nur diagonalen Komponenten, die beim Lösen der Methode des minimalen Quadrats und zur Annäherung / Komprimierung der Matrix verwendet werden.
Die Verfügbarkeit der vier Regeln von Tensor ist wie folgt.
Tensor | Tensor(Gleichen Typs) | 〇 |
Tensor | Tensor(Anderer Typ) | ✕ |
Tensor | Python-Skalar | 〇 |
Tensor | ndarray | ✕ |
Es ist zu beachten, dass die vier Betriebsregeln zwischen Tensoren vom gleichen Typ sein müssen. Bei der Ausführung von Operationen mit vier Regeln werden die Dimensionen automatisch durch vektorskalare Operationen und Matrixvektoroperationen ergänzt (Broadcast. user / basic.broadcasting.html)).
Tensors vier Regeln
#Vektor
v = torch.tensor([1, 2, 3])
w = torch.tensor([4, 5, 6])
#Warteschlange
m = torch.tensor([[0, 1, 2], [10, 20, 30]])
n = torch.tensor([[3, 4, 5], [40, 50, 60]])
#Vektor-Skalar
v_pl = v + 10 # tensor([11, 12, 13])
v_mi = v - 10 # tensor([-9, -8, -7])
v_mu = v * 10 # tensor([10, 20, 30])
v_di = v / 10 # tensor([0, 0, 0])
#Vektor-Vektor
v_pl = v + w # tensor([5, 7, 9])
v_mi = v - w # tensor([-3, -3, -3])
v_mu = v * w # tensor([4, 10, 18])
v_di = v / w # tensor([0, 0, 0])
#Matrix und Vektor
v_pl = m + v # tensor([[ 1, 3, 5], [11, 22, 33]])
v_mi = m - v # tensor([[-1, -1, -1], [ 9, 18, 27]])
v_mu = m * v # tensor([[ 0, 2, 6], [10, 40, 90]])
v_di = m / v # tensor([[ 0, 0, 0], [10, 10, 10]])
#Matrix und Matrix
v_pl = m + n # tensor([[3, 5, 7], [50, 70, 90]])
v_mi = m - n # tensor([[-3, -3, -3], [-30, -30, -30]])
v_mu = m * n # tensor([[0, 4, 10], [400, 1000, 1800]])
v_di = m / n # tensor([[0, 0, 0], [0, 0, 0]])
Es gibt eine Stelle, an der die Ausgabe beim Teilen 0 wird. Wie Sie sehen können, ist der Tensortyp int, auch wenn das Ergebnis der Operation einen Wert nach dem Dezimalpunkt anzeigt. Wenn Sie dies vermeiden möchten, geben Sie float usw. im Voraus an.
PyTorch bietet verschiedene mathematische Funktionen für Tensor.
** Mathematische Funktionen, die jeden Wert von Tensor beeinflussen **
Funktionsname | Überblick |
---|---|
abs | Absolutwert |
sin | Sinus |
cos | Kosinus |
exp | Exponentiell |
log | Logarithmische Funktion |
sqrt | Quadratwurzel |
** Aggregatfunktion **
Funktion | Überblick |
---|---|
sum | Summe der Werte im Tensor |
max | Maximalwert im Tensor |
min | Minimalwert im Tensor |
mean | Mittelwert im Tensor |
std | Standardabweichung der Werte im Tensor |
Funktion | Überblick |
---|---|
dot | Inneres Produkt von Vektoren |
mv | Produkt aus Matrix und Vektor |
mm | Produkt aus Matrix und Matrix |
matmul | Wählen Sie je nach Art des Arguments automatisch Punkt, mv, mm aus und führen Sie es aus |
gesv | Lösen simultaner Gleichungen durch LU-Zerlegung |
eig, symeig | Einzigartige Wertzerlegung. symeig ist für die Zielmatrix |
svd | Singularitätszerlegung |
Mal sehen, was das Ergebnis sein wird (ich habe es nicht gezeigt, weil das Ergebnis ziemlich lang ist).
Arithmetik der linearen Algebra
m = torch.randn(100, 10) #Erstellen Sie 100x10-Matrixtestdaten
v = torch.randn(10)
#Innenprodukt
torch.dot(v, v)
#Produkt aus Matrix und Vektor
torch.mv(m, v)
#Matrix Produkt
torch.mm(m.t(), m)
#Singularitätszerlegung
u, s, v = torch.svd(m)
Funktionsname | Überblick |
---|---|
view | Ändern Sie die Dimension von Tensor |
cat, stack | Verbinde Tensoren miteinander |
transpose | Dimensionen tauschen |
Wenn Sie `require_grad``` von Tensor auf`
True setzen, wird das Flag für die automatische Differenzierung aktiviert. Dieses Flag ist für alle Parameter und Daten beim Umgang mit neuronalen Netzen aktiviert. Durch Stapeln verschiedener Operationen auf Tensor mit aktiviertem `` `require_grad
wird ein Berechnungsdiagramm erstellt und durch Aufrufen der Rückwärtsmethode automatisch von diesen Informationen unterschieden.
Dieses Mal habe ich hauptsächlich Tensor zusammengefasst, der für die PyTorch-Konfiguration und das maschinelle Lernen unverzichtbar ist. Vielen Dank an alle, die bis zum Ende gelesen haben. Ab dem nächsten Mal werde ich nach und nach ein neuronales Netzwerk aufbauen. Wenn Sie also interessiert sind, schauen Sie bitte.
Morisebashi (2018) "Kann im Feld verwendet werden! Einführung in die PyTorch-Entwicklung Erstellen eines Deep-Learning-Modells und Implementieren in Anwendungen “
Recommended Posts