[PYTHON] Hinweise zur Optimierung mit Pytorch

Da Tensorflow2, das auf Funktionen basiert, schwierig zu verwenden ist, migrieren wir zu Pytorch. Dieser Artikel richtet sich an Nostalgie, die Verlustfunktionen und Optimierungsmethoden selbst erstellen möchten, nicht an moderne Kinder, die Pakete so verwenden, wie sie sind. Fossilien, die sagen "Gradient wird von Hand berechnet", sind nicht das Ziel.

Datengenerierung

Richtig generiert

import numpy as np
import matplotlib.pyplot as plt
import torch
from torch.autograd import Variable
import torch.optim as optim

N = 100
a_data =  - 1
b_data = 1
sigma_data = 0.1
x_data = 2 * np.random.rand(N)
y_data = a_data * x_data + b_data + sigma_data * np.random.randn(N)

sample.png

Bei Verwendung eines optimierten Pakets

Für verdrehte Menschen, die ihre eigene Verlustfunktion erstellen möchten.

#Variablendefinition
a = Variable(torch.randn(1), requires_grad=True)
b = Variable(torch.randn(1), requires_grad=True)

#Datenkonvertierung
x_train = torch.tensor(x_data)
y_train = torch.tensor(y_data)

#Funktionseinstellungen optimieren
optimizer = optim.Adam([a, b])

#Anzahl der Wiederholungen
epoch = 4000

loss_epoch = np.zeros(epoch)

for i in range(epoch):
    #Gradienteninitialisierung im Optimierer
    optimizer.zero_grad()
    #Lineares Modell
    y_hat = a * x_train + b
    #Berechnung der Verlustfunktion
    loss = (y_train - y_hat).norm()
    loss_epoch[i] = loss.item()
    #Verlaufseinstellung
    loss.backward()
    #Führen Sie eine Optimierung durch
    optimizer.step()

Adam_loss.png Adam.png

Wenn Sie nur den Farbverlauf verwenden

Für diejenigen, die Optimizer nicht verwenden möchten und mehr Wendungen haben möchten. Optimiert mit der Gradientenmethode.

#Parametervorbereitung
a = torch.randn(1,requires_grad=True)
b = torch.randn(1,requires_grad=True)

#Datenkonvertierung
x_train = torch.tensor(x_data)
y_train = torch.tensor(y_data)

#Lernrate
eta = 0.001

#Anzahl der Wiederholungen
epoch = 4000
loss_epoch = np.zeros(epoch)
for i in range(epoch):
    #Starten Sie die Aufnahme des Farbverlaufs
    a.requires_grad_(True)
    b.requires_grad_(True)
    #Vorhersage und Berechnung der Verlustfunktion
    y_hat = a * x_train + b
    loss = (y_train - y_hat).norm()
    loss_epoch[i] = loss.item()
    #Verlaufseinstellung
    loss.backward()
    #Beenden Sie die Aufzeichnung des Verlaufs
    a.requires_grad_(False)
    b.requires_grad_(False)

    #Update mit Farbverlauf
    a = a - eta * a.grad
    b = b - eta * b.grad

original_loss.png original.png

Zusammenfassung

Es scheint einfach zu bedienen zu sein, sobald Sie sich an die Neigungserfassung und das Anhalten von Teilen gewöhnt haben.

Codedetails

https://github.com/yuji0001/2020Introduction_of_Pytorch

Reference Pytorch-Tutorials (hier).

Author Yuji Okamoto [email protected]

Recommended Posts

Hinweise zur Optimierung mit Pytorch
Hinweise zur Verwendung von Alembic
[Django] Hinweise zur Verwendung der Django-Debug-Symbolleiste
Hinweise zur Verwendung von MeCab aus Python
Hinweise zur Verwendung von Post-Receive und Post-Merge
Hinweise zur Installation von Python mit PyEnv
Hinweise zur Verwendung von rstrip mit Python.
Hinweise zur Verwendung von matplotlib auf dem Server
(Anfänger) Hinweise zur Verwendung von pyenv auf dem Mac
Hinweise zur Verwendung von OpenCV mit Windows 10 Python 3.8.3.
Hinweise zur Flasche
Hinweise zur Implementierung von APNs-Tests mit Pytest
Hinweise zu Pytorch
Hinweise zur Verwendung von dict mit Python [Competition Pro]
Hinweise zur Verwendung von TensorFlow unter Bash unter Ubuntu unter Windows
[Python] Hinweise zur Beschleunigung genetischer Algorithmen mithilfe von Multiprocessing
Hinweise zu neuronalen Netzen
Sellerie-Notizen zu Django
Hinweise zur Installation von PycURL
Hinweise zur Verwendung von Python-Unterprozessen
Hinweise zu Funktionen der SciPy.linalg-Familie
Mindestnotizen bei Verwendung von Python auf Mac (Homebrew Edition)
Hinweise zur Funktion und Rückverfolgung
Hinweise zur Installation von dlib auf einem Mac
Hinweise zum SQLite3-Modul von Python
Versuchen Sie die Funktionsoptimierung mit Hyperopt
Anmerkungen zu * args und ** kargs
Hinweise zum Definieren von PySide-Steckplätzen (2)
Versuchen Sie es mit OpenCV unter Windows
Anmerkungen zu Pyenv und Atom
Vorsichtsmaßnahmen beim Definieren von Slots für PySide
[Python] Hinweise zur Datenanalyse
Hinweise zur Installation von Python auf Ihrem Mac
Wie man die Anzahl der GPUs aus Python kennt ~ Hinweise zur Verwendung von Multiprocessing mit pytorch ~
Prozess auf GPU mit chainer.cuda.elementwise
Hinweise zur Installation von pipenv auf Ihrem Mac
Online-Übertragung mit Python
Hinweise zur Installation von Anaconda 3 unter Windows
Hinweise zu imshow () von OpenCV
Hinweise zur Installation von Python unter CentOS
Lösen Sie multivariate Optimierungsprobleme mit sagemath
Hinweise zu Python- und Wörterbuchtypen
Hinweise zur Paketverwaltung mit conda
Versuchen Sie es mit Pillow auf iPython (Teil 1)
pyTorch optim SGD gründliche Erklärung
Hinweise zur Verwendung von Pywinauto
Installieren Sie Pytorch unter Blender 2.90 Python unter Windows
Hinweise zur Verwendung von featuretools
Versuchen Sie es mit ArUco mit Raspberry Pi
Finden Sie Golferwartungen mithilfe dynamischer Optimierung
Studie über die Miete in Tokio mit Python (3-2)
Versuchen Sie es mit Pillow auf iPython (Teil 3).
Verwenden einer seriellen Konsole unter Ubuntu 20.04
Hinweise zum Zugriff auf dashDB über Python