Poradnik PyTorcha

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 PyTorch?

PyTorch to biblioteka uczenia maszynowego oparta na technologii Torch typu open source, sล‚uลผฤ…ca do przetwarzania jฤ™zyka naturalnego Python. Jest podobny do NumPy, ale z potฤ™ลผnฤ… obsล‚ugฤ… GPU. Oferuje dynamiczne wykresy obliczeniowe, ktรณre moลผna modyfikowaฤ‡ w dowolnym miejscu za pomocฤ… autogradu. PyTorch jest takลผe szybszy niลผ niektรณre inne frameworki. Zostaล‚ opracowany przez grupฤ™ badawczฤ… AI Facebooka w 2016 roku.

Zalety i wady PyTorcha

Oto zalety i wady PyTorch:

Zalety PyTorcha

  1. Prosta biblioteka
    Kod PyTorch jest prosty. Jest ล‚atwy do zrozumienia i natychmiast korzystasz z biblioteki. Na przykล‚ad spรณjrz na poniลผszy fragment kodu:
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.

  1. Dynamiczny wykres obliczeniowy

Dynamiczny wykres obliczeniowy

ลนrรณdล‚o obrazu: Odkrywanie gล‚ฤ™bokiego uczenia siฤ™ za pomocฤ… 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.

  1. 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 zgล‚osiล‚o, ลผe PyTorch jest szybszy niลผ inne platformy pod wzglฤ™dem obrazรณw przetwarzanych na sekundฤ™.

Jak widaฤ‡ poniลผej, wykresy porรณwnawcze z vgg16 i resnet152

Zalety PyTorcha

Zalety PyTorcha

  1. Tubylec Python

PyTorch jest bardziej oparty na Pythonie. Na przykล‚ad, jeล›li chcesz wytrenowaฤ‡ model, moลผesz uลผyฤ‡ natywnego przepล‚ywu sterowania, takiego jak pฤ™tle i rekurencje, bez koniecznoล›ci dodawania wiฤ™kszej liczby specjalnych zmiennych lub sesji, aby mรณc je uruchomiฤ‡. Jest to bardzo pomocne w procesie szkoleniowym.

Pytorch implementuje takลผe programowanie imperatywne, ktรณre jest zdecydowanie bardziej elastyczne. Moลผna zatem wydrukowaฤ‡ wartoล›ฤ‡ tensora w trakcie procesu obliczeniowego.

Wady PyTorcha

PyTorch wymaga aplikacji innych firm do wizualizacji. Potrzebuje takลผe serwera API do produkcji.

W dalszej czฤ™ล›ci tego samouczka dotyczฤ…cego PyTorch dowiemy siฤ™ o rรณลผnicy miฤ™dzy PyTorch i 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

Instalowanie PyTorcha

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.

AWS Sagemaker

Nastฤ™pny krok: Kliknij Otwรณrz, aby uruchomiฤ‡ instancjฤ™ notatnika.

AWS Sagemaker

Wreszcie w Jupyter, Kliknij Nowy i wybierz conda_pytorch_p36 i moลผesz juลผ uลผywaฤ‡ instancji notatnika z zainstalowanym Pytorch.

W dalszej czฤ™ล›ci tego samouczka dotyczฤ…cego PyTorch poznamy podstawy frameworku PyTorch.

Podstawy frameworku PyTorch

Poznajmy podstawowe koncepcje PyTorch, zanim zagล‚ฤ™bimy siฤ™ w temat. PyTorch uลผywa Tensora dla kaลผdej zmiennej, podobnie jak ndarray numpy, ale z obsล‚ugฤ… obliczeล„ GPU. Tutaj wyjaล›nimy model sieciowy, funkcjฤ™ straty, Backprop i Optimizer.

Model sieciowy

Sieฤ‡ moลผna zbudowaฤ‡ poprzez podklasฤ™ torch.nn. Istniejฤ… 2 gล‚รณwne czฤ™ล›ci,

  1. Pierwsza czฤ™ล›ฤ‡ polega na zdefiniowaniu parametrรณw i warstw, ktรณrych bฤ™dziesz uลผywaฤ‡
  2. 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

Funkcja straty sล‚uลผy do pomiaru tego, jak dobrze model predykcyjny jest w stanie przewidzieฤ‡ oczekiwane wyniki. PyTorch ma juลผ wiele standardowych funkcji utraty w module torch.nn. Na przykล‚ad moลผesz uลผyฤ‡ straty krzyลผowej entropii, aby rozwiฤ…zaฤ‡ wieloklasowy problem klasyfikacji PyTorch. ลatwo jest zdefiniowaฤ‡ funkcjฤ™ straty i obliczyฤ‡ straty:

loss_fn = nn.CrossEntropyLoss()

#training process
loss = loss_fn(out, target)

Za pomocฤ… PyTorch ล‚atwo jest obliczyฤ‡ wล‚asnฤ… funkcjฤ™ straty.

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.

Prosta regresja za pomocฤ… PyTorch

Nauczmy siฤ™ prostej regresji na przykล‚adach PyTorch:

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:

Wykres punktowy prostej regresji za pomocฤ… PyTorch

Przed rozpoczฤ™ciem procesu uczenia musisz przekonwertowaฤ‡ tablicฤ™ numpy na zmienne obsล‚ugiwane przez Torch i autograd, jak pokazano w poniลผszym przykล‚adzie regresji PyTorch.

# 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

Jak widaฤ‡ poniลผej, pomyล›lnie wykonaล‚eล› regresjฤ™ PyTorch za pomocฤ… sieci neuronowej. Wล‚aล›ciwie przy kaลผdej iteracji czerwona linia na wykresie bฤ™dzie aktualizowana i zmienia swoje poล‚oลผenie, aby dopasowaฤ‡ siฤ™ do danych. Ale na tym obrazku pokazuje tylko wynik koล„cowy, jak pokazano w poniลผszym przykล‚adzie PyTorch:

Wykres punktowy wyniku prostej regresji

Przykล‚ad klasyfikacji obrazu za pomocฤ… 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.

Klasyfikacja obrazรณw za pomocฤ… PyTorch

Krok 1) Wstฤ™pnie przetwรณrz dane

W pierwszym kroku tego przykล‚adu klasyfikacji PyTorch zaล‚adujesz zbiรณr danych za pomocฤ… moduล‚u torchvision.

Zanim rozpoczniesz proces uczenia, musisz zrozumieฤ‡ dane. Torchvision zaล‚aduje zbiรณr danych i przeksztaล‚ci obrazy zgodnie z odpowiednimi wymaganiami sieci, takimi jak ksztaล‚t i normalizacja obrazรณw.

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.

Przykล‚ad klasyfikacji obrazu za pomocฤ… PyTorch

Krok 2) Konfiguracja modelu sieci

Teraz w tym przykล‚adzie PyTorch utworzysz prostฤ… sieฤ‡ neuronowฤ… do klasyfikacji obrazรณw PyTorch.

Tutaj przedstawiamy inny sposรณb tworzenia modelu sieci w PyTorch. Uลผyjemy nn.Sequential do stworzenia modelu sekwencji zamiast tworzyฤ‡ podklasฤ™ 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

  1. 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
  2. Nastฤ™pnie masz warstwฤ™ MaxPool2D
  3. Funkcja aktywacji ReLU
  4. warstwฤ™ rezygnacji, aby usunฤ…ฤ‡ wartoล›ci o niskim prawdopodobieล„stwie.
  5. Nastฤ™pnie drugi Conv2d z ksztaล‚tem wejล›ciowym 10 z ostatniej warstwy i ksztaล‚tem wyjล›ciowym 20 z rozmiarem jฤ…dra 5
  6. Nastฤ™pnie warstwa MaxPool2d
  7. Funkcja aktywacji ReLU.
  8. Nastฤ™pnie spล‚aszczysz tensor przed wprowadzeniem go do warstwy Linear
  9. 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.

W przypadku kryterium uลผyjesz CrossEntropyLoss. W przypadku Optimizera uลผyjesz SGD ze wspรณล‚czynnikiem uczenia 0.001 i momentem 0.9, jak pokazano w poniลผszym przykล‚adzie PyTorch.

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

Przykล‚ad klasyfikacji obrazu za pomocฤ… PyTorch

Podsumowanie

  • PyTorch jest oparty na otwartym kodzie ลบrรณdล‚owym Torch Nauczanie maszynowe biblioteka dla przetwarzanie jฤ™zyka naturalnego za pomocฤ… Python.
  • Zalety PyTorch: 1) Prosta biblioteka, 2) Dynamiczny wykres obliczeniowy, 3) Lepsza wydajnoล›ฤ‡, 4) Natywny Python
  • PyTorch uลผywa Tensora dla kaลผdej zmiennej podobnej do ndarray numpy, ale z obsล‚ugฤ… obliczeล„ GPU.
  • Jednฤ… z popularnych metod poznania podstaw gล‚ฤ™bokiego uczenia siฤ™ jest wykorzystanie zbioru danych MNIST.

Podsumuj ten post nastฤ™pujฤ…co: