[PYTHON] PyTorch Super Einführung PyTorch-Grundlagen

Einführung

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.

Was ist PyTorch?

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-Konfiguration

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

Erzeugung und Umwandlung von Tensoren

Erzeugung von Tensor

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)

So konvertieren Sie Tensor

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()

Tensor-Indizierungsoperation

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]])

Tensorarithmetik

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.

Tensors vier Regeln

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.

In PyTorch verfügbare mathematische Funktionen

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

Linearer Algebra-Operator

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)

Andere häufig verwendete Funktionen

Funktionsname Überblick
view Ändern Sie die Dimension von Tensor
cat, stack Verbinde Tensoren miteinander
transpose Dimensionen tauschen

Automatische Differenzierung

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.

abschließend

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.

Referenz

Morisebashi (2018) "Kann im Feld verwendet werden! Einführung in die PyTorch-Entwicklung Erstellen eines Deep-Learning-Modells und Implementieren in Anwendungen

Recommended Posts

PyTorch Super Einführung PyTorch-Grundlagen
Pytorch super Einführung
[Super Einführung in das maschinelle Lernen] Lernen Sie Pytorch-Tutorials
Einführung in Lightning Pytorch
Flasche super elementare Einführung
[Super Einführung in das maschinelle Lernen] Lernen Sie Pytorch-Tutorials
PyTorch-Einführung (virtuelle Umgebung)
Einführung in PyTorch (1) Automatische Differenzierung
Eine super Einführung in Linux
[Super Basics] Über jupyter Notebook
Super Einführung in das maschinelle Lernen
Einführung
[Details (?)] Einführung in Pytorch ~ CNN von CIFAR10 ~
[PyTorch] Einführung in die Dokumentklassifizierung mit BERT
[Einführung in Pytorch] Ich habe mit sinGAN ♬ gespielt
Grundlagen von PyTorch (1) - Verwendung von Tensor-
[Einführung in Data Scientist] Grundlagen von Python ♬