Python-Anfänger berührt Pytorch (2)

In diesem Artikel werde ich eine Fortsetzung des vorherigen Artikels "Python-Anfänger berühren Pytorch (1)" schreiben.

1. Unterscheiden Sie mit Pytorch

1-1. Grundneigung Wie ich am Ende des letzten Males erwähnt habe, werde ich diesmal die Differenzierung erläutern.

y = 3x \\
\\
y = 3x\\

y = x^2+3x+4

In der obigen Funktion beträgt die Steigung "3" </ font>. Dies liegt daran, dass wenn Sie x in einer zweidimensionalen Ebene um "1" erhöhen, y um "3" erhöht wird. Die Steigung kann als Änderungsbetrag im Diagramm bezeichnet werden. Es wird leichter zu verstehen sein, wenn Sie sich die Grafik vorstellen können, die Sie in der Grundschule gelernt haben.

1-2. Neigung, wenn mehr als eine Variable </ h2> Früher gab es eine Variable pro Funktion. Eine Variable bedeutet, dass nur ein Zeichen am Ergebnis der Funktion beteiligt ist. Schauen wir uns das folgende Beispiel an. Die obigen Funktionen sind alle Funktionen mit einer Variablen. Was für eine Funktion ist eine Funktion mit zwei oder mehr Variablen?


y = x_1+2x_2+3x_3

Die obige Funktion ist eine Funktion mit zwei Variablen. Der große Unterschied zu einer Funktion mit einer Variablen besteht in der Anzahl der Variablen. Es gibt 2 Typen und 3 Arten von Variablen, die in der Funktion x genannt werden.
Berücksichtigen Sie bei Funktionen mit zwei oder mehr Variablen die Steigung für jede Variable. Deshalb,

x_Neigung um 1= 1\\x_Neige ungefähr 2= 2\\x_Neige ungefähr 3= 3 

Es sieht aus wie.

Sie können sehen, dass sich der Ausdrucksbereich der Funktion aufgrund der Zunahme der Neigungsarten erweitert hat. (Die Breite des Ausdrucks ist die Anzahl der Variationen der Antwort "y".)

Das neuronale Netzwerk verwendet viele Variablen, um komplexe Funktionen und Funktionen als Diskriminator auszudrücken.

Ich werde die detaillierte Beziehung zwischen Funktionen und Variablen weglassen. Interessenten werden ermutigt, sich intensiv mit Büchern und zuverlässigen Websites zu beschäftigen.

1-3.2 So ermitteln Sie die Steigung der Ordnungsfunktion oder höher Als nächstes werde ich erklären, wie man eine Funktion unterscheidet, die mehr als eine quadratische Funktion ist, und die Steigung findet. Grundsätzlich ist die Differenzierung für Funktionen wirksam, die quadratisch oder höher sind.
y = x^2 + x\\
\\
y' = 2x + 1

y'means different. Die Differenzierung der obigen Gleichung ergibt die folgende Gleichung. Ich werde das Grundprinzip erklären. Die Differenzierungsregeln, wenn x eine Variable ist, werden unten beschrieben.

y = ax^n \hspace{5mm} \rightarrow \hspace{5mm} y' = nax^{n-1} \\
y = x \hspace{5mm} \rightarrow \hspace{5mm} y' = 1

Wenn Sie dies verstehen, gibt es diesmal kein Problem.

Dies ist wirklich die Grundlage der Grundlage für die Differenzierung. Differenzierungen, die hier nicht eingeführt werden können, wie komplizierte Differenzierungsmethoden, Dreiecksfunktionen und Logarithmen, sind hier

Link: Schöne Geschichte der Mathematik der High School Differentialformelliste (von der Grundausbildung bis zur Entwicklung)

Bei quadratischen Funktionen und höher können Sie auch die Steigung überprüfen, die sich auf einen bestimmten Punkt der Funktion konzentriert.

Beispiel) \hspace{1mm} y=x^2 + 3  \hspace{5mm} \rightarrow \hspace{5mm} y' = 2x \hspace{2mm}(Differential)\\
x=Neigung um 1\hspace{3mm}y` =2 ・ 1=2\\
x=Neigung um 2\hspace{3mm}y` ==4

Wenn Sie das oben Genannte verstehen können, ist dieser Artikel leicht zu verstehen.

2. Tatsächliche Codierung

2-1.1 Differenzierung von Variablen Lassen Sie uns tatsächlich mit Pytorch unterscheiden. Als allererstes
y = 3x

Wird durch Pytorch differenziert und die Steigung 3 berechnet.

python


import torch
x = torch.ones(3,3,requires_grad=True)
a = torch.tensor([[3,3,3],[3,3,3],[3,3,3]])
y = a*x

Fügen Sie beim Umgang mit Differenzierung "require_grad = True" hinzu, wenn Sie die Variable deklarieren, die Sie differenzieren möchten. Dies ist der Code, der eine Differenzierung ermöglicht. Wenn der Inhalt der zur Unterscheidung verwendeten Variablen ein ganzzahliger Typ ist, tritt ein Fehler auf. Deklarieren Sie es als Gleitkommatyp. </ font>

Ergebnis


tensor([[3., 3., 3.],
        [3., 3., 3.],
        [3., 3., 3.]], grad_fn=<MulBackward0>)

Stellen Sie sicher, dass die Anweisung "grad_fn =" zur Ausgabe hinzugefügt wird.

Hier sind einige Dinge zu beachten, wenn Sie differenzieren. In Pytorch muss bei der Differenzierung eindimensional sein. Da es sich um </ font> handelt, werden alle Tensoren in einem zusammengefasst.

python


y = torch.sum(y)

torch.sum () wurde im vorherigen Artikel eingeführt. Bitte beachten Sie den vorherigen Artikel. Python-Anfänger berühren Pytorch (1)

Wir werden endlich differenzieren.

python


y.backward()
print(x.grad)

.backward () ist eine notwendige Vorbereitung für die Differenzierung. Wenn Sie .backward () ausführen, tritt außerdem ein Fehler auf, wenn die zu differenzierende Variable nicht eindimensional ist.

Mal sehen, das Ergebnis

Ergebnis


tensor([[3., 3., 3.],
        [3., 3., 3.],
        [3., 3., 3.]])

Ich konnte Differentialberechnungen fest durchführen und das Ergebnis war, dass die Steigung "3" war.

2-2.2 Differenzierung von Variablen oder mehr Als nächstes werden wir Funktionen mit zwei oder mehr Variablen unterscheiden. Um das Verständnis der Variablen zu erleichtern, sei die Funktion "out" und die Variable "x, y, z".
out = x + 2y + 3z\\
 \\


Neige um x= 1\\
Neige dich um y= 2\\
Neigung um z= 3

Wir werden mit Pytorch rechnen.

python


x = torch.ones((3,3),requires_grad=True)
y = torch.ones((3,3),requires_grad=True)
z = torch.ones((3,3),requires_grad=True)
out = 1*x+2*y+3*z

out = torch.sum(out)
out.backward()

print('Neige um x')
print(x.grad)
print('Neige dich um y')
print(y.grad)
print('Neigung um z')
print(z.grad)

Ergebnis


Neige um x
tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]])
Neige dich um y
tensor([[2., 2., 2.],
        [2., 2., 2.],
        [2., 2., 2.]])
Neigung um z
tensor([[3., 3., 3.],
        [3., 3., 3.],
        [3., 3., 3.]])

2-3.2 Differenzierung der Ordnungsfunktion Abschließend werde ich die Differenzierung quadratischer Funktionen einführen. Die Formel wurde in diesem Artikel eingeführt
 \hspace{1mm} y=x^2 + 3  \hspace{5mm} \rightarrow \hspace{5mm} y' = 2x \hspace{2mm}(Differential)\\
x=Neigung um 1\hspace{3mm}y` =2 ・ 1=2\\
x=Neigung um 2\hspace{3mm}y` =2 ・ 2=4

Wir werden dies mit Pytorch berechnen.

python


a = torch.ones(3,3)
x1 = torch.ones((3,3),requires_grad=True)

x2 = torch.tensor([[2.0,2.0,2.0],
                  [2.0,2.0,2.0],
                  [2.0,2.0,2.0]],requires_grad=True)

b = torch.tensor([[3,3,3],
                  [3,3,3],
                  [3,3,3]])
out1 = a*x1*x1+b
out2 = a*x2*x2+b

out1 = torch.sum(out1)
out2 = torch.sum(out2)

out1.backward()
print("x =Neigung um 1")
print(x1.grad)

out2.backward()
print("x =Neigung um 2")
print(x2.grad)

Ergebnis


x =Neigung um 1
tensor([[2., 2., 2.],
        [2., 2., 2.],
        [2., 2., 2.]])
x =Neigung um 2
tensor([[4., 4., 4.],
        [4., 4., 4.],
        [4., 4., 4.]])

Sie können es gut berechnen.

3. Schließlich Diesmal habe ich eine einfache Differenzierung mit Pytorch gemacht. Ich denke, es gab einige Teile, die aufgrund mangelnder Erklärung schwer zu verstehen waren. Außerdem möchte ich so etwas wie Übungen hinzufügen und verbessern, damit die Leser ihre Hände bewegen und es verstehen können. Vielen Dank für das Lesen bis zum Ende. Das nächste Mal möchte ich lernen, wie man ein neuronales Netzwerk in Pytorch aufbaut.

Recommended Posts