Tutorial PyTorch

Rezumatul tutorialului Pytorch

รŽn acest tutorial pytorch, veศ›i รฎnvฤƒศ›a toate conceptele de la zero. Acest tutorial acoperฤƒ subiecte de la bazฤƒ pรขnฤƒ la avansate, cum ar fi definiศ›ia pytorch, avantajele ศ™i dezavantajele pytorch, compararea, instalarea, cadrul pytorch, regresia ศ™i clasificarea imaginilor. Acest tutorial pytorch este absolut gratuit.

Ce este PyTorch?

PyTorch este o bibliotecฤƒ de รฎnvฤƒศ›are automatฤƒ bazatฤƒ pe Torch cu sursฤƒ deschisฤƒ pentru utilizarea procesฤƒrii limbajului natural Python. Este similar cu NumPy, dar cu suport puternic GPU. Oferฤƒ grafice computaศ›ionale dinamice pe care le puteศ›i modifica din mers cu ajutorul autogradului. PyTorch este, de asemenea, mai rapid decรขt alte cadre. A fost dezvoltat de Grupul de cercetare AI al Facebook รฎn 2016.

Avantajele ศ™i dezavantajele PyTorch

Urmฤƒtoarele sunt avantajele ศ™i dezavantajele PyTorch:

Avantajele PyTorch

  1. Biblioteca simplฤƒ
    Codul PyTorch este simplu. Este uศ™or de รฎnศ›eles ศ™i utilizaศ›i biblioteca instantaneu. De exemplu, aruncaศ›i o privire la fragmentul de cod de mai jos:
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

Dupฤƒ cum am menศ›ionat mai sus, puteศ›i defini cu uศ™urinศ›ฤƒ modelul de reศ›ea ศ™i puteศ›i รฎnศ›elege rapid codul fฤƒrฤƒ prea multฤƒ pregฤƒtire.

  1. Graficul de calcul dinamic

Graficul de calcul dinamic

Sursa imagine: Exploring Deep Learning cu PyTorch

Pytorch oferฤƒ Dynamic Computational Graph (DAG). Graficele computaศ›ionale reprezintฤƒ o modalitate de a exprima expresii matematice รฎn modele de grafice sau รฎn teorii, cum ar fi nodurile ศ™i muchiile. Nodul va face operaศ›ia matematicฤƒ, iar muchia este un Tensor care va fi introdus รฎn noduri ศ™i va transporta ieศ™irea nodului รฎn Tensor.

DAG este un grafic care are o formฤƒ arbitrarฤƒ ศ™i capabil sฤƒ facฤƒ operaศ›ii รฎntre diferite grafice de intrare. La fiecare iteraศ›ie, este creat un nou grafic. Deci, este posibil sฤƒ aveศ›i aceeaศ™i structurฤƒ de grafic sau sฤƒ creaศ›i un nou grafic cu o operaศ›ie diferitฤƒ, sau รฎl putem numi un grafic dinamic.

  1. Performanศ›ฤƒ mai bunฤƒ

Comunitฤƒศ›ile ศ™i cercetฤƒtorii, comparaศ›i ศ™i comparaศ›i cadrele pentru a vedea care dintre ele este mai rapidฤƒ. Un depozit GitHub Benchmark privind cadrele de รฎnvฤƒศ›are profundฤƒ ศ™i GPU-uri a raportat cฤƒ PyTorch este mai rapid decรขt celฤƒlalt cadru รฎn ceea ce priveศ™te imaginile procesate pe secundฤƒ.

Dupฤƒ cum puteศ›i vedea mai jos, graficele de comparaศ›ie cu vgg16 ศ™i resnet152

Avantajele PyTorch

Avantajele PyTorch

  1. Nativ Python

PyTorch se bazeazฤƒ mai mult pe python. De exemplu, dacฤƒ doriศ›i sฤƒ antrenaศ›i un model, puteศ›i utiliza fluxul de control nativ, cum ar fi bucla ศ™i recursiuni, fฤƒrฤƒ a fi nevoie sฤƒ adฤƒugaศ›i mai multe variabile sau sesiuni speciale pentru a le putea rula. Acest lucru este foarte util pentru procesul de instruire.

Pytorch implementeazฤƒ ศ™i programarea imperativฤƒ ศ™i este cu siguranศ›ฤƒ mai flexibil. Deci, este posibil sฤƒ tipฤƒriศ›i valoarea tensorului รฎn mijlocul unui proces de calcul.

Dezavantajul PyTorch

PyTorch necesitฤƒ aplicaศ›ii terศ›e pentru vizualizare. De asemenea, are nevoie de un server API pentru producศ›ie.

รŽn continuare, รฎn acest tutorial PyTorch, vom afla despre diferenศ›a dintre PyTorch ศ™i TensorFlow.

PyTorch vs. Tensorflow

Parametru PyTorch flux tensor
Definiศ›ia modelului Modelul este definit รฎntr-o subclasฤƒ ศ™i oferฤƒ pachet uศ™or de utilizat Modelul este definit cu multe ศ™i trebuie sฤƒ รฎnศ›elegeศ›i sintaxa
Suport GPU Da Da
Tipul graficului Dinamic Static
Instrumente Nici un instrument de vizualizare Puteศ›i utiliza instrumentul de vizualizare Tensorboard
Comunitate Comunitatea รฎncฤƒ รฎn creศ™tere Comunitฤƒศ›i mari active

Instalarea PyTorch

Linux

Este simplu sฤƒ รฎl instalaศ›i รฎn Linux. Puteศ›i alege sฤƒ utilizaศ›i un mediu virtual sau sฤƒ รฎl instalaศ›i direct cu acces root. Tastaศ›i aceastฤƒ comandฤƒ รฎn terminal

pip3 install --upgrade torch torchvision

AWS Sagemaker

Sagemaker este una dintre platformele din Amazon Serviciu web care oferฤƒ un motor puternic de รฎnvฤƒศ›are automatฤƒ cu configuraศ›ii de รฎnvฤƒศ›are profundฤƒ preinstalate pentru ca cercetฤƒtorii de date sau dezvoltatorii sฤƒ construiascฤƒ, sฤƒ antreneze ศ™i sฤƒ implementeze modele la orice scarฤƒ.

Mai รฎntรขi Deschideศ›i Amazon Sagemaker console ศ™i faceศ›i clic pe Creare o instanศ›ฤƒ de blocnotes ศ™i completaศ›i toate detaliile pentru blocnotesul dvs.

AWS Sagemaker

Pasul urmฤƒtor, faceศ›i clic pe Deschidere pentru a lansa instanศ›a de notebook.

AWS Sagemaker

รŽn cele din urmฤƒ, รฎn Jupyter, Faceศ›i clic pe Nou ศ™i alegeศ›i conda_pytorch_p36 ศ™i sunteศ›i gata sฤƒ utilizaศ›i instanศ›a de notebook cu Pytorch instalat.

รŽn continuare, รฎn acest tutorial PyTorch, vom afla despre elementele de bazฤƒ ale cadrului PyTorch.

Noศ›iuni de bazฤƒ ale cadrului PyTorch

Sฤƒ รฎnvฤƒศ›ฤƒm conceptele de bazฤƒ ale PyTorch รฎnainte de a ne arunca รฎn adรขncime. PyTorch foloseศ™te Tensor pentru fiecare variabilฤƒ similarฤƒ cu ndarray-ul lui numpy, dar cu suport de calcul GPU. Aici vom explica modelul de reศ›ea, funcศ›ia de pierdere, Backprop ศ™i Optimizer.

Model de reศ›ea

Reศ›eaua poate fi construitฤƒ prin subclasificarea torศ›ei.nn. Existฤƒ 2 pฤƒrศ›i principale,

  1. Prima parte este sฤƒ definiศ›i parametrii ศ™i straturile pe care le veศ›i folosi
  2. A doua parte este sarcina principalฤƒ numitฤƒ proces de avans, care va prelua o intrare ศ™i va prezice rezultatul.
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()

Dupฤƒ cum puteศ›i vedea mai sus, creaศ›i o clasฤƒ de nn.Module numitฤƒ Model. Conศ›ine 2 straturi Conv2d ศ™i un strat Linear. Primul strat conv2d are o intrare de 3 ศ™i forma de ieศ™ire de 20. Al doilea strat va avea o intrare de 20 ศ™i va produce o formฤƒ de ieศ™ire de 40. Ultimul strat este un strat complet conectat รฎn forma de 320 ศ™i va produce o ieศ™ire de 10.

Procesul รฎnainte va prelua o intrare de X ศ™i o va alimenta stratul conv1 ศ™i va efectua funcศ›ia ReLU,

รŽn mod similar, va alimenta ศ™i stratul conv2. Dupฤƒ aceea, x-ul va fi remodelat รฎn (-1, 320) ศ™i va fi alimentat รฎn stratul FC final. รŽnainte de a trimite ieศ™irea, veศ›i folosi funcศ›ia de activare softmax.

Procesul รฎnapoi este definit automat de autograd, aศ™a cฤƒ trebuie doar sฤƒ definiศ›i procesul รฎnainte.

Funcศ›ia de pierdere

Funcศ›ia de pierdere este utilizatฤƒ pentru a mฤƒsura cรขt de bine este capabil modelul de predicศ›ie sฤƒ prezicฤƒ rezultatele aศ™teptate. PyTorch are deja multe funcศ›ii standard de pierdere รฎn modulul torch.nn. De exemplu, puteศ›i utiliza Pierderea รฎncruciศ™atฤƒ pentru a rezolva o problemฤƒ de clasificare PyTorch cu mai multe clase. Este uศ™or sฤƒ definiศ›i funcศ›ia de pierdere ศ™i sฤƒ calculaศ›i pierderile:

loss_fn = nn.CrossEntropyLoss()

#training process
loss = loss_fn(out, target)

Este uศ™or sฤƒ utilizaศ›i propriul calcul al funcศ›iei de pierdere cu PyTorch.

Propul din spate

Pentru a efectua backpropagation, apelaศ›i pur ศ™i simplu los.backward(). Eroarea va fi calculatฤƒ, dar nu uitaศ›i sฤƒ ศ™tergeศ›i gradientul existent cu zero_grad()

net.zero_grad() # to clear the existing gradient
loss.backward() # to perform backpropragation

Instrumentul de optimizare a

Torch.optim oferฤƒ algoritmi comuni de optimizare. Puteศ›i defini un optimizator cu un pas simplu:

optimizer = torch.optim.SGD(net.parameters(), lr = 0.01, momentum=0.9)

Trebuie sฤƒ treceศ›i parametrii modelului de reศ›ea ศ™i rata de รฎnvฤƒศ›are, astfel รฎncรขt la fiecare iteraศ›ie parametrii sฤƒ fie actualizaศ›i dupฤƒ procesul de backprop.

Regresie simplฤƒ cu PyTorch

Sฤƒ รฎnvฤƒศ›ฤƒm regresia simplฤƒ cu exemple PyTorch:

Pasul 1) Crearea modelului nostru de reศ›ea

Modelul nostru de reศ›ea este un strat liniar simplu, cu o formฤƒ de intrare ศ™i o formฤƒ de ieศ™ire de 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)

ศ˜i ieศ™irea din reศ›ea ar trebui sฤƒ fie aศ™a

Net(
  (hidden): Linear(in_features=1, out_features=1, bias=True)
)

Pasul 2) Datele de testare

รŽnainte de a รฎncepe procesul de formare, trebuie sฤƒ cunoaศ™teศ›i datele noastre. Faceศ›i o funcศ›ie aleatorie pentru a testa modelul nostru. Y = x3 sin(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()

Iatฤƒ diagrama de dispersie a funcศ›iei noastre:

Graficul de dispersie al regresiei simple cu PyTorch

รŽnainte de a รฎncepe procesul de antrenament, trebuie sฤƒ convertiศ›i matricea numpy รฎn Variabile acceptate de Torch ศ™i autograd, aศ™a cum se aratฤƒ รฎn exemplul de regresie PyTorch de mai jos.

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

Pasul 3) Optimizer ศ™i pierdere

รŽn continuare, ar trebui sฤƒ definiศ›i Optimizatorul ศ™i Funcศ›ia de pierdere pentru procesul nostru de antrenament.

# Define Optimizer and Loss Function
optimizer = torch.optim.SGD(net.parameters(), lr=0.2)
loss_func = torch.nn.MSELoss()

Pasul 4) Antrenament

Acum sฤƒ รฎncepem procesul nostru de formare. Cu o epocฤƒ de 250, veศ›i repeta datele noastre pentru a gฤƒsi cea mai bunฤƒ valoare pentru hiperparametrii noศ™tri.

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

Pasul 5) Rezultat

Dupฤƒ cum puteศ›i vedea mai jos, aศ›i efectuat cu succes regresia PyTorch cu o reศ›ea neuronalฤƒ. De fapt, la fiecare iteraศ›ie, linia roศ™ie din diagramฤƒ se va actualiza ศ™i รฎศ™i va schimba poziศ›ia pentru a se potrivi cu datele. Dar รฎn aceastฤƒ imagine, vฤƒ aratฤƒ doar rezultatul final, aศ™a cum se aratฤƒ รฎn exemplul PyTorch de mai jos:

Diagrama de dispersie a rezultatului regresiei simple

Exemplu de clasificare a imaginilor cu PyTorch

Una dintre metodele populare de a รฎnvฤƒศ›a elementele de bazฤƒ รฎnvฤƒศ›are profundฤƒ este cu setul de date MNIST. Este โ€žHello Worldโ€ รฎn รฎnvฤƒศ›area profundฤƒ. Setul de date conศ›ine numere scrise de mรขnฤƒ de la 0 la 9, cu un total de 60,000 de mostre de antrenament ศ™i 10,000 de mostre de testare care sunt deja etichetate cu dimensiunea de 28ร—28 pixeli.

Clasificarea imaginilor cu PyTorch

Pasul 1) Preproceseazฤƒ datele

รŽn primul pas al acestui exemplu de clasificare PyTorch, veศ›i รฎncฤƒrca setul de date folosind modulul torchvision.

รŽnainte de a รฎncepe procesul de formare, trebuie sฤƒ รฎnศ›elegeศ›i datele. Torchvision va รฎncฤƒrca setul de date ศ™i va transforma imaginile cu cerinศ›ele adecvate pentru reศ›ea, cum ar fi forma ศ™i normalizarea imaginilor.

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

Funcศ›ia de transformare converteศ™te imaginile รฎn tensor ศ™i normalizeazฤƒ valoarea. Funcศ›ia torchvision.transforms.MNIST, va descฤƒrca setul de date (dacฤƒ nu este disponibil) รฎn director, va seta setul de date pentru antrenament dacฤƒ este necesar ศ™i va face procesul de transformare.

Pentru a vizualiza setul de date, utilizaศ›i data_iterator pentru a obศ›ine urmฤƒtorul lot de imagini ศ™i etichete. Folosiศ›i matplot pentru a reprezenta aceste imagini ศ™i eticheta corespunzฤƒtoare. Dupฤƒ cum puteศ›i vedea mai jos imaginile noastre ศ™i etichetele lor.

Exemplu de clasificare a imaginilor cu PyTorch

Pasul 2) Configurarea modelului de reศ›ea

Acum, รฎn acest exemplu PyTorch, veศ›i crea o reศ›ea neuronalฤƒ simplฤƒ pentru clasificarea imaginilor PyTorch.

Aici, vฤƒ prezentฤƒm o altฤƒ modalitate de a crea modelul de reศ›ea รฎn PyTorch. Vom folosi nn.Sequential pentru a face un model de secvenศ›ฤƒ รฎn loc sฤƒ facem o subclasฤƒ de 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)

Iatฤƒ rezultatul modelului nostru de reศ›ea

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

Explicaศ›ia reศ›elei

  1. Secvenศ›a este cฤƒ primul strat este un strat Conv2D cu o formฤƒ de intrare de 1 ศ™i o formฤƒ de ieศ™ire de 10 cu o dimensiune a nucleului de 5
  2. Apoi, aveศ›i un strat MaxPool2D
  3. O funcศ›ie de activare ReLU
  4. un strat de abandon pentru a elimina valorile cu probabilitate scฤƒzutฤƒ.
  5. Apoi un al doilea Conv2d cu forma de intrare de 10 din ultimul strat ศ™i forma de ieศ™ire de 20 cu o dimensiune a nucleului de 5
  6. Apoi un strat MaxPool2d
  7. Funcศ›ia de activare ReLU.
  8. Dupฤƒ aceea, veศ›i aplatiza tensorul รฎnainte de a-l introduce รฎn stratul Linear
  9. Stratul liniar va mapa rezultatul nostru la al doilea strat liniar cu funcศ›ia de activare softmax

Pasul 3) Antreneazฤƒ modelul

รŽnainte de a รฎncepe procesul de antrenament, este necesar sฤƒ configuraศ›i funcศ›ia de criteriu ศ™i de optimizare.

Pentru criteriu, veศ›i folosi CrossEntropyLoss. Pentru Optimizer, veศ›i folosi SGD cu o ratฤƒ de รฎnvฤƒศ›are de 0.001 ศ™i un impuls de 0.9, aศ™a cum se aratฤƒ รฎn exemplul PyTorch de mai jos.

import torch.optim as optim

criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)

Procesul de transmitere va lua forma de intrare ศ™i o va trece la primul strat conv2d. Apoi, de acolo, va fi alimentat รฎn maxpool2d ศ™i, รฎn final, va fi introdus รฎn funcศ›ia de activare ReLU. Acelaศ™i proces va avea loc รฎn al doilea strat conv2d. Dupฤƒ aceea, intrarea va fi remodelatฤƒ รฎn (-1,320) ศ™i va fi alimentatฤƒ รฎn stratul fc pentru a prezice ieศ™irea.

Acum, veศ›i รฎncepe procesul de antrenament. Veศ›i parcurge setul de date de 2 ori sau cu o epocฤƒ de 2 ศ™i veศ›i imprima pierderea curentฤƒ la fiecare 2000 de lot.

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

La fiecare epocฤƒ, enumeratorul va primi urmฤƒtorul tuplu de intrare ศ™i etichetele corespunzฤƒtoare. รŽnainte de a alimenta intrarea รฎn modelul nostru de reศ›ea, trebuie sฤƒ ศ™tergem gradientul anterior. Acest lucru este necesar deoarece dupฤƒ procesul invers (procesul de backpropagation), gradientul va fi acumulat รฎn loc sฤƒ fie รฎnlocuit. Apoi, vom calcula pierderile de la ieศ™irea prezisฤƒ de la ieศ™irea aศ™teptatฤƒ. Dupฤƒ aceea, vom face o retropropagare pentru a calcula gradientul ศ™i, รฎn final, vom actualiza parametrii.

Iatฤƒ rezultatul procesului de instruire

[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

Pasul 4) Testaศ›i modelul

Dupฤƒ ce ne instruiศ›i modelul, trebuie sฤƒ testaศ›i sau sฤƒ evaluaศ›i cu alte seturi de imagini.

Vom folosi un iterator pentru test_loader ศ™i va genera un lot de imagini ศ™i etichete care vor fi transmise modelului antrenat. Ieศ™irea estimatฤƒ va fi afiศ™atฤƒ ศ™i comparatฤƒ cu rezultatul aศ™teptat.

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

Exemplu de clasificare a imaginilor cu PyTorch

Rezumat

  • PyTorch este un open-source bazat pe Torch Invatare mecanica biblioteca pentru prelucrarea limbajului natural folosind Python.
  • Avantajele PyTorch: 1) Bibliotecฤƒ simplฤƒ, 2) Grafic de calcul dinamic, 3) Performanศ›ฤƒ mai bunฤƒ, 4) Nativ Python
  • PyTorch foloseศ™te Tensor pentru fiecare variabilฤƒ similarฤƒ cu ndarray-ul lui numpy, dar cu suport de calcul GPU.
  • Una dintre metodele populare de a รฎnvฤƒศ›a elementele de bazฤƒ ale รฎnvฤƒศ›ฤƒrii profunde este cu setul de date MNIST.

Rezumaศ›i aceastฤƒ postare cu: