PyTorsamouczek ch
Podsumowanie samouczka Pytorcha
W tym samouczku pytorch nauczysz siฤ wszystkich pojฤฤ od podstaw. Ten samouczek obejmuje podstawowe i zaawansowane tematy, takie jak definicja pytorch, zalety i wady pytorch, porรณwnanie, instalacja, framework pytorch, regresja i klasyfikacja obrazรณw. Ten samouczek pytorch jest caลkowicie darmowy.
Co to jest PyTorH?
PyTorch jest open-source Torch based Machine Learning library for natural language processing using Python. It is similar to NumPy but with powerful GPU support. It offers Dynamic Computational Graphs that you can modify on the go with the help of autograd. PyTorch is also faster than some other frameworks. It was developed by Facebookโs AI Research Group in 2016.
PyTorch Advantages and Disadvantages
Following are the advantages and disadvantages of PyTorch:
Advantages of PyTorch
- Prosta biblioteka
PyTorch code is simple. It is easy to understand, and you use the library instantly. For example, take a look at the code snippet below:
class Net(torch.nn.Module):
def __init__(self):
super(Net, self).__init__()
self.layer = torch.nn.Linear(1, 1)
def forward(self, x):
x = self.layer(x)
return x
Jak wspomniano powyลผej, moลผesz ลatwo zdefiniowaฤ model sieci i szybko zrozumieฤ kod, bez wiฤkszego szkolenia.
- Dynamiczny wykres obliczeniowy
Image Source: Exploring Deep Learning with PyTorch
Pytorch oferuje Dynamic Computational Graph (DAG). Grafy obliczeniowe to sposรณb wyraลผania wyraลผeล matematycznych w modelach grafรณw lub teoriach, takich jak wฤzลy i krawฤdzie. Wฤzeล wykona operacjฤ matematycznฤ , a krawฤdลบ jest Tensorem, ktรณry zostanie wprowadzony do wฤzลรณw i przeniesie dane wyjลciowe wฤzลa w Tensorze.
DAG to graf, ktรณry przyjmuje dowolny ksztaลt i moลผe wykonywaฤ operacje miฤdzy rรณลผnymi grafami wejลciowymi. Kaลผda iteracja tworzy nowy graf. Tak wiฤc moลผliwe jest posiadanie tej samej struktury grafu lub utworzenie nowego grafu z innฤ operacjฤ , lub moลผemy nazwaฤ go grafem dynamicznym.
- Lepsza wydajnoลฤ
Spoลecznoลci i badacze dokonujฤ testรณw porรณwnawczych i porรณwnujฤ platformy, aby zobaczyฤ, ktรณra z nich jest szybsza. Repozytorium GitHub Test porรณwnawczy platform gลฤbokiego uczenia siฤ i procesorรณw graficznych reported that PyTorch is faster than the other framework in terms of images processed per second.
Jak widaฤ poniลผej, wykresy porรณwnawcze z vgg16 i resnet152
- Tubylec Python
PyTorch is more python based. For example, if you want to train a model, you can use native control flow such as looping and recursions without the need to add more special variables or sessions to be able to run them. This is very helpful for the training process.
Pytorch implementuje takลผe programowanie imperatywne, ktรณre jest zdecydowanie bardziej elastyczne. Moลผna zatem wydrukowaฤ wartoลฤ tensora w trakcie procesu obliczeniowego.
Disadvantage of PyTorch
PyTorch requires third-party applications for Visualization. It also needs an API server for production.
Next in this PyTorch tutorial, we will learn about the difference between PyTorch and TensorFlow.
PyTorch Vs. Tensorflow
| Parametr | PyTorch | Tensorflow |
|---|---|---|
| Definicja modelu | Model jest zdefiniowany w podklasie i oferuje ลatwy w uลผyciu pakiet | Model jest zdefiniowany na wiele sposobรณw i musisz zrozumieฤ skลadniฤ |
| Obsลuga GPU | Tak | Tak |
| Typ wykresu | Dynamiczny | Statyczny |
| Narzฤdzia | Brak narzฤdzia do wizualizacji | Moลผesz uลผyฤ narzฤdzia do wizualizacji Tensorboard |
| Spoลecznoลฤ | Spoลecznoลฤ wciฤ ลผ roลnie | Duลผe aktywne spoลecznoลci |
Installing PyTorch
Linux
Instalacja w systemie Linux jest prosta. Moลผesz wybraฤ ลrodowisko wirtualne lub zainstalowaฤ je bezpoลrednio z uprawnieniami roota. Wpisz to polecenie w terminalu
pip3 install --upgrade torch torchvision
AWS Sagemaker
Sagemaker to jedna z platform w Amazon Serwis internetowy ktรณry oferuje potฤลผny silnik uczenia maszynowego z preinstalowanymi konfiguracjami gลฤbokiego uczenia dla analitykรณw danych i programistรณw w celu tworzenia, trenowania i wdraลผania modeli w dowolnej skali.
Najpierw otwรณrz Amazon Strzelec konsoli i kliknij Utwรณrz instancjฤ notatnika, a nastฤpnie wprowadลบ wszystkie szczegรณลy dotyczฤ ce notatnika.
Nastฤpny krok: Kliknij Otwรณrz, aby uruchomiฤ instancjฤ notatnika.
Wreszcie w Jupyter, Kliknij Nowy i wybierz conda_pytorch_p36 i moลผesz juลผ uลผywaฤ instancji notatnika z zainstalowanym Pytorch.
Next in this PyTorch tutorial, we will learn about PyTorch framework basics.
PyTorch Framework Basics
Letโs learn the basic concepts of PyTorch before we deep dive. PyTorch uses Tensor for every variable similar to numpyโs ndarray but with GPU computation support. Here we will explain the network model, loss function, Backprop, and Optimizer.
Model sieciowy
Sieฤ moลผna zbudowaฤ poprzez podklasฤ torch.nn. Istniejฤ 2 gลรณwne czฤลci,
- Pierwsza czฤลฤ polega na zdefiniowaniu parametrรณw i warstw, ktรณrych bฤdziesz uลผywaฤ
- Druga czฤลฤ to gลรณwne zadanie zwane procesem forward, ktรณre pobiera dane wejลciowe i przewiduje wynik.
Import torch
import torch.nn as nn
import torch.nn.functional as F
class Model(nn.Module):
def __init__(self):
super(Model, self).__init__()
self.conv1 = nn.Conv2d(3, 20, 5)
self.conv2 = nn.Conv2d(20, 40, 5)
self.fc1 = nn.Linear(320, 10)
def forward(self, x):
x = F.relu(self.conv1(x))
x = F.relu(self.conv2(x))
x = x.view(-1, 320)
x = F.relu(self.fc1(x))
return F.log_softmax(x)
net = Model()
Jak widaฤ powyลผej, tworzysz klasฤ nn.Module o nazwie Model. Zawiera 2 warstwy Conv2d i warstwฤ Linear. Pierwsza warstwa conv2d przyjmuje dane wejลciowe o wartoลci 3 i ksztaลt wyjลciowy o wartoลci 20. Druga warstwa przyjmuje dane wejลciowe o wartoลci 20 i generuje ksztaลt wyjลciowy o wartoลci 40. Ostatnia warstwa jest w peลni poลฤ czonฤ warstwฤ w ksztaลcie 320 i generuje wynik 10.
Proces forward pobierze dane wejลciowe X i przekaลผe je do warstwy conv1 i wykona funkcjฤ ReLU,
Podobnie bฤdzie rรณwnieลผ zasilaฤ warstwฤ conv2. Nastฤpnie x zostanie przeksztaลcone w (-1, 320) i wprowadzone do koลcowej warstwy FC. Zanim wyลlesz dane wyjลciowe, skorzystasz z funkcji aktywacji softmax.
Proces wsteczny jest automatycznie definiowany przez autograd, wiฤc wystarczy zdefiniowaฤ proces do przodu.
Funkcja straty
The loss function is used to measure how well the prediction model is able to predict the expected results. PyTorch already has many standard loss functions in the torch.nn module. For example, you can use the Cross-Entropy Loss to solve a multi-class PyTorch classification problem. Itโs easy to define the loss function and compute the losses:
loss_fn = nn.CrossEntropyLoss() #training process loss = loss_fn(out, target)
Itโs easy to use your own loss function calculation with PyTorch.
Podpรณrka
Aby wykonaฤ propagacjฤ wstecznฤ , wystarczy wywoลaฤ funkcjฤ los.backward(). Bลฤ d zostanie obliczony, ale pamiฤtaj, aby wyczyลciฤ istniejฤ cy gradient za pomocฤ funkcji zero_grad()
net.zero_grad() # to clear the existing gradient loss.backward() # to perform backpropragation
Optimizer
Torch.optim zapewnia typowe algorytmy optymalizacji. Moลผesz zdefiniowaฤ optymalizator za pomocฤ prostego kroku:
optimizer = torch.optim.SGD(net.parameters(), lr = 0.01, momentum=0.9)
Musisz przekazaฤ parametry modelu sieci i szybkoลฤ uczenia siฤ, aby przy kaลผdej iteracji parametry byลy aktualizowane po procesie backprop.
Simple Regression with PyTorch
Letโs learn simple regression with PyTorch examples:
Krok 1) Stworzenie naszego modelu sieci
Nasz model sieci to prosta warstwa liniowa z wejลciem i wyjลciem o ksztaลcie 1.
from __future__ import print_function
import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.autograd import Variable
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.layer = torch.nn.Linear(1, 1)
def forward(self, x):
x = self.layer(x)
return x
net = Net()
print(net)
A wyjลcie sieciowe powinno byฤ takie
Net( (hidden): Linear(in_features=1, out_features=1, bias=True) )
Krok 2) Dane testowe
Zanim rozpoczniesz proces szkolenia, musisz poznaฤ nasze dane. Tworzysz losowฤ funkcjฤ, aby przetestowaฤ nasz model. Y = x3 grzech(x)+ 3x+0.8 rand(100)
# Visualize our data import matplotlib.pyplot as plt import numpy as np x = np.random.rand(100) y = np.sin(x) * np.power(x,3) + 3*x + np.random.rand(100)*0.8 plt.scatter(x, y) plt.show()
Oto wykres rozrzutu naszej funkcji:
Before you start the training process, you need to convert the numpy array to Variables that supported by Torch and autograd as shown in the below PyTorch regression example.
# convert numpy array to tensor in shape of input size x = torch.from_numpy(x.reshape(-1,1)).float() y = torch.from_numpy(y.reshape(-1,1)).float() print(x, y)
Krok 3) Optymalizator i strata
Nastฤpnie naleลผy zdefiniowaฤ Optymalizator i Funkcjฤ Straty dla naszego procesu uczenia.
# Define Optimizer and Loss Function optimizer = torch.optim.SGD(net.parameters(), lr=0.2) loss_func = torch.nn.MSELoss()
Krok 4) Szkolenie
Teraz rozpocznijmy nasz proces szkoleniowy. W epoce 250 bฤdziesz iterowaฤ nasze dane, aby znaleลบฤ najlepszฤ wartoลฤ naszych hiperparametrรณw.
inputs = Variable(x)
outputs = Variable(y)
for i in range(250):
prediction = net(inputs)
loss = loss_func(prediction, outputs)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if i % 10 == 0:
# plot and show learning process
plt.cla()
plt.scatter(x.data.numpy(), y.data.numpy())
plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=2)
plt.text(0.5, 0, 'Loss=%.4f' % loss.data.numpy(), fontdict={'size': 10, 'color': 'red'})
plt.pause(0.1)
plt.show()
Krok 5) Wynik
As you can see below, you successfully performed PyTorch regression with a neural network. Actually, on every iteration, the red line in the plot will update and change its position to fit the data. But in this picture, it only show you the final result as shown in the below PyTorch example:
Image Classification Example with PyTorch
Jedna z popularnych metod nauki podstaw gลฤboka nauka jest z zestawem danych MNIST. Jest to โHello Worldโ w gลฤbokim uczeniu. Zestaw danych zawiera rฤcznie pisane liczby od 0 do 9 z caลkowitฤ liczbฤ 60,000 10,000 prรณbek szkoleniowych i 28 28 prรณbek testowych, ktรณre sฤ juลผ oznaczone rozmiarem XNUMXรXNUMX pikseli.
Krok 1) Wstฤpnie przetwรณrz dane
In the first step of this PyTorch classification example, you will load the dataset using torchvision module.
Before you start the training process, you need to understand the data. Torchvision will load the dataset and transform the images with the appropriate requirement for the network such as the shape and normalizing the images.
import torch
import torchvision
import numpy as np
from torchvision import datasets, models, transforms
# This is used to transform the images to Tensor and normalize it
transform = transforms.Compose(
[transforms.ToTensor(),
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
training = torchvision.datasets.MNIST(root='./data', train=True,
download=True, transform=transform)
train_loader = torch.utils.data.DataLoader(training, batch_size=4,
shuffle=True, num_workers=2)
testing = torchvision.datasets.MNIST(root='./data', train=False,
download=True, transform=transform)
test_loader = torch.utils.data.DataLoader(testing, batch_size=4,
shuffle=False, num_workers=2)
classes = ('0', '1', '2', '3',
'4', '5', '6', '7', '8', '9')
import matplotlib.pyplot as plt
import numpy as np
#create an iterator for train_loader
# get random training images
data_iterator = iter(train_loader)
images, labels = data_iterator.next()
#plot 4 images to visualize the data
rows = 2
columns = 2
fig=plt.figure()
for i in range(4):
fig.add_subplot(rows, columns, i+1)
plt.title(classes[labels[i]])
img = images[i] / 2 + 0.5 # this is for unnormalize the image
img = torchvision.transforms.ToPILImage()(img)
plt.imshow(img)
plt.show()
Funkcja transformacji konwertuje obrazy na tensor i normalizuje wartoลฤ. Funkcja torchvision.transforms.MNIST, pobierze zbiรณr danych (jeลli nie jest dostฤpny) do katalogu, w razie potrzeby ustawi zbiรณr danych do uczenia i wykona proces transformacji.
Aby zwizualizowaฤ zbiรณr danych, uลผyj data_iterator, aby uzyskaฤ kolejnฤ partiฤ obrazรณw i etykiet. Do wykreลlenia tych obrazรณw i odpowiedniej etykiety uลผywasz narzฤdzia Matplot. Jak widaฤ poniลผej nasze obrazy i ich etykiety.
Krok 2) Konfiguracja modelu sieci
Now in this PyTorch example, you will make a simple neural network for PyTorch image classification.
Here, we introduce you another way to create the Network model in PyTorch. We will use nn.Sequential to make a sequence model instead of making a subclass of nn.Module.
import torch.nn as nn
# flatten the tensor into
class Flatten(nn.Module):
def forward(self, input):
return input.view(input.size(0), -1)
#sequential based model
seq_model = nn.Sequential(
nn.Conv2d(1, 10, kernel_size=5),
nn.MaxPool2d(2),
nn.ReLU(),
nn.Dropout2d(),
nn.Conv2d(10, 20, kernel_size=5),
nn.MaxPool2d(2),
nn.ReLU(),
Flatten(),
nn.Linear(320, 50),
nn.ReLU(),
nn.Linear(50, 10),
nn.Softmax(),
)
net = seq_model
print(net)
Oto wynik naszego modelu sieci
Sequential( (0): Conv2d(1, 10, kernel_size=(5, 5), stride=(1, 1)) (1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) (2): ReLU() (3): Dropout2d(p=0.5) (4): Conv2d(10, 20, kernel_size=(5, 5), stride=(1, 1)) (5): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) (6): ReLU() (7): Flatten() (8): Linear(in_features=320, out_features=50, bias=True) (9): ReLU() (10): Linear(in_features=50, out_features=10, bias=True) (11): Softmax() )
Wyjaลnienie sieci
- Sekwencja jest taka, ลผe โโpierwsza warstwa to warstwa Conv2D z ksztaลtem wejลciowym 1 i ksztaลtem wyjลciowym 10 z rozmiarem jฤ dra 5
- Nastฤpnie masz warstwฤ MaxPool2D
- Funkcja aktywacji ReLU
- warstwฤ rezygnacji, aby usunฤ ฤ wartoลci o niskim prawdopodobieลstwie.
- Nastฤpnie drugi Conv2d z ksztaลtem wejลciowym 10 z ostatniej warstwy i ksztaลtem wyjลciowym 20 z rozmiarem jฤ dra 5
- Nastฤpnie warstwa MaxPool2d
- Funkcja aktywacji ReLU.
- Nastฤpnie spลaszczysz tensor przed wprowadzeniem go do warstwy Linear
- Warstwa liniowa odwzoruje nasze wyjลcie na drugฤ warstwฤ liniowฤ z funkcjฤ aktywacji softmax
Krok 3) Wytrenuj model
Przed rozpoczฤciem procesu uczenia naleลผy ustawiฤ funkcjฤ kryterium i optymalizatora.
For the criterion, you will use the CrossEntropyLoss. For the Optimizer, you will use the SGD with a learning rate of 0.001 and a momentum of 0.9 as shown in the below PyTorch example.
import torch.optim as optim criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
Proces forward przyjmie ksztaลt wejลciowy i przekaลผe go do pierwszej warstwy conv2d. Nastฤpnie zostanie on wprowadzony do maxpool2d i ostatecznie wprowadzony do funkcji aktywacji ReLU. Ten sam proces bฤdzie miaล miejsce w drugiej warstwie conv2d. Nastฤpnie dane wejลciowe zostanฤ przeksztaลcone w (-1,320) i wprowadzone do warstwy fc w celu przewidzenia wyniku.
Teraz rozpoczniesz proces szkolenia. Bฤdziesz iterowaฤ po naszym zestawie danych 2 razy lub z epokฤ 2 i drukowaฤ bieลผฤ cฤ stratฤ w kaลผdej partii 2000.
for epoch in range(2):
#set the running loss at each epoch to zero
running_loss = 0.0
# we will enumerate the train loader with starting index of 0
# for each iteration (i) and the data (tuple of input and labels)
for i, data in enumerate(train_loader, 0):
inputs, labels = data
# clear the gradient
optimizer.zero_grad()
#feed the input and acquire the output from network
outputs = net(inputs)
#calculating the predicted and the expected loss
loss = criterion(outputs, labels)
#compute the gradient
loss.backward()
#update the parameters
optimizer.step()
# print statistics
running_loss += loss.item()
if i % 1000 == 0:
print('[%d, %5d] loss: %.3f' %
(epoch + 1, i + 1, running_loss / 1000))
running_loss = 0.0
W kaลผdej epoce moduล wyliczajฤ cy otrzyma nastฤpnฤ krotkฤ danych wejลciowych i odpowiadajฤ ce im etykiety. Zanim wprowadzimy dane wejลciowe do naszego modelu sieci, musimy wyczyลciฤ poprzedni gradient. Jest to wymagane, poniewaลผ po procesie wstecznym (procesie propagacji wstecznej) gradient zostanie kumulowany, a nie zastฤpowany. Nastฤpnie obliczymy straty na podstawie przewidywanej produkcji na podstawie oczekiwanej produkcji. Nastฤpnie wykonamy propagacjฤ wstecznฤ , aby obliczyฤ gradient, a na koniec zaktualizujemy parametry.
Oto wynik procesu szkoleniowego
[1, 1] loss: 0.002 [1, 1001] loss: 2.302 [1, 2001] loss: 2.295 [1, 3001] loss: 2.204 [1, 4001] loss: 1.930 [1, 5001] loss: 1.791 [1, 6001] loss: 1.756 [1, 7001] loss: 1.744 [1, 8001] loss: 1.696 [1, 9001] loss: 1.650 [1, 10001] loss: 1.640 [1, 11001] loss: 1.631 [1, 12001] loss: 1.631 [1, 13001] loss: 1.624 [1, 14001] loss: 1.616 [2, 1] loss: 0.001 [2, 1001] loss: 1.604 [2, 2001] loss: 1.607 [2, 3001] loss: 1.602 [2, 4001] loss: 1.596 [2, 5001] loss: 1.608 [2, 6001] loss: 1.589 [2, 7001] loss: 1.610 [2, 8001] loss: 1.596 [2, 9001] loss: 1.598 [2, 10001] loss: 1.603 [2, 11001] loss: 1.596 [2, 12001] loss: 1.587 [2, 13001] loss: 1.596 [2, 14001] loss: 1.603
Krok 4) Przetestuj model
Po wytrenowaniu naszego modelu naleลผy przetestowaฤ lub oceniฤ go z innymi zestawami obrazรณw.
Uลผyjemy iteratora dla test_loader, ktรณry wygeneruje partiฤ obrazรณw i etykiet, ktรณre zostanฤ przekazane do wytrenowanego modelu. Przewidywany wynik zostanie wyลwietlony i porรณwnany z oczekiwanym wynikiem.
#make an iterator from test_loader
#Get a batch of training images
test_iterator = iter(test_loader)
images, labels = test_iterator.next()
results = net(images)
_, predicted = torch.max(results, 1)
print('Predicted: ', ' '.join('%5s' % classes[predicted[j]] for j in range(4)))
fig2 = plt.figure()
for i in range(4):
fig2.add_subplot(rows, columns, i+1)
plt.title('truth ' + classes[labels[i]] + ': predict ' + classes[predicted[i]])
img = images[i] / 2 + 0.5 # this is to unnormalize the image
img = torchvision.transforms.ToPILImage()(img)
plt.imshow(img)
plt.show()
Podsumowanie
- PyTorch jest oprogramowaniem typu open source Torch based Nauczanie maszynowe biblioteka dla przetwarzanie jฤzyka naturalnego za pomocฤ Python.
- Advantages of PyTorch: 1) Simple Library, 2) Dynamic Computational Graph, 3) Better Performance, 4) Native Python
- PyTorch uses Tensor for every variable similar to numpyโs ndarray but with GPU computation support.
- Jednฤ z popularnych metod poznania podstaw gลฤbokiego uczenia siฤ jest wykorzystanie zbioru danych MNIST.










