PyTorTutorialul cap.

โšก Rezumat inteligent

PyTorch este framework-ul open-source de deep learning de la Meta, care va sta la baza a 85% din lucrฤƒrile de cercetare รฎn domeniul inteligenศ›ei artificiale din 2026. LessCursurile acoperฤƒ instalarea, noศ›iunile de bazฤƒ despre framework, regresia simplฤƒ, clasificarea imaginilor ศ™i implementarea AWS SageMaker.

  • ๐Ÿง  Grafice dinamice: Execuศ›ia rapidฤƒ รฎnseamnฤƒ cฤƒ tensorii ruleazฤƒ linie cu linie, facilitรขnd Pythondepanare รฎn stil -.
  • ๐Ÿ PythonAPI-ul ic: Se citeศ™te natural pentru oricine este familiarizat cu NumPy ศ™i Python.
  • ๐Ÿ“ฆ Ecosistem bogat: Faศ›ฤƒ รฎmbrฤƒศ›iศ™ฤƒtoare, vLLM, DeepSpeed โ€‹โ€‹ศ™i TorchVision sunt construite pe PyTorch.
  • โš™๏ธ Flux de lucru pentru instruire: Definiศ›i modelul, alegeศ›i pierderea ศ™i optimizatorul, apoi parcurgeศ›i bucla รฎnainte, รฎnapoi ศ™i pas cu pas.
  • ๐Ÿ“Š Dominanศ›a cercetฤƒrii: 85% din lucrฤƒrile recente folosesc PyTorch faศ›ฤƒ de 15% TensorFlow.
  • ๐Ÿค– Pregฤƒtit pentru LLM: Suport nativ pentru transformatoare, reglaj fin LoRA ศ™i fluxuri de lucru de cuantizare.

PyTorTutorialul cap.

Ce este PyTorh?

PyTorch este un open-source TorBibliotecฤƒ de รฎnvฤƒศ›are automatฤƒ bazatฤƒ pe ch pentru procesarea limbajului natural folosind PythonEste similar cu NumPy, dar cu suport puternic pentru GPU. Oferฤƒ grafice computaศ›ionale dinamice pe care le puteศ›i modifica din mers cu ajutorul funcศ›iei Autograd. PyTorch este, de asemenea, mai rapid decรขt alte framework-uri. A fost dezvoltat de Grupul de Cercetare AI al Facebook รฎn 2016.

ศ˜tiind ce PyTorch oferฤƒ o perspectivฤƒ echilibratฤƒ asupra punctelor forte ศ™i dezavantajelor sale.

PyTorAvantaje ศ™i dezavantaje

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

Avantajele PyTorch

  1. Biblioteca simplฤƒ
    PyTorCodul ch este simplu. Este uศ™or de รฎnศ›eles ศ™i foloseศ™ti biblioteca instantaneu. De exemplu, aruncฤƒ 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 imaginii: Explorarea รฎnvฤƒศ›ฤƒrii profunde cu PyTorch

PyTorch oferฤƒ Grafuri Computaศ›ionale Dinamice (DAG). Grafurile computaศ›ionale sunt o modalitate de a exprima expresii matematice รฎn modele grafice sau teorii, cum ar fi noduri ศ™i muchii. Nodul va efectua 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 framework รฎ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 este mai mult bazat pe Python. De exemplu, dacฤƒ vrei sฤƒ antrenezi un model, poศ›i folosi un flux de control nativ, cum ar fi loo.ping ศ™i recursivitฤƒศ›i 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 antrenament.

PyTorch implementeazฤƒ ศ™i Programarea Imperativฤƒ, fiind cu siguranศ›ฤƒ mai flexibilฤƒ. Prin urmare, este posibil sฤƒ se afiศ™eze 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.

Urmฤƒtorul รฎn acest PyTorรŽn tutorialul ch, vom รฎnvฤƒศ›a despre diferenศ›a dintre PyTorch ศ™i TensorFlow.

PyTorch vs. TensorFlow

Parametru PyTorch TensorFlow
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

Avรขnd รฎn vedere comparaศ›ia, urmฤƒtorul pas este obศ›inerea lui PyTorch care ruleazฤƒ local sau รฎn cloud.

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.

Urmฤƒtorul รฎn acest PyTortutorial ch, vom รฎnvฤƒศ›a despre PyTorNoศ›iuni de bazฤƒ ale cadrului CH.

Odatฤƒ instalarea finalizatฤƒ, API-ul รฎn sine este urmฤƒtoarea oprire.

PyTorNoศ›iuni de bazฤƒ despre framework-ul ch

Sฤƒ รฎnvฤƒศ›ฤƒm conceptele de bazฤƒ ale PyTorรฎnainte de a ne aprofunda. PyTorch foloseศ™te Tensor pentru fiecare variabilฤƒ, similar cu ndarray din 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 de entropie รฎncruciศ™atฤƒ pentru a rezolva o problemฤƒ Py multi-clasฤƒ.Torproblemฤƒ de clasificare ch. Este uศ™or sฤƒ definim funcศ›ia de pierdere ศ™i sฤƒ calculฤƒm pierderile:

loss_fn = nn.CrossEntropyLoss()

#training process
loss = loss_fn(out, target)

Este uศ™or sฤƒ foloseศ™ti 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.

Cea mai clarฤƒ modalitate de a รฎnvฤƒศ›a API-ul este un exemplu mic, complet.

Regresie simplฤƒ cu PyTorch

Sฤƒ รฎnvฤƒศ›ฤƒm regresie simplฤƒ cu PyTorexemple de ch:

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:

Diagramฤƒ de dispersie a 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 Py de mai josTorexemplu de regresie ch.

# 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 executat cu succes PyTorRegresie ch cu o reศ›ea neuronalฤƒ. De fapt, la fiecare iteraศ›ie, linia roศ™ie din grafic se va actualiza ศ™i รฎศ™i va schimba poziศ›ia pentru a se potrivi datelor. Dar รฎn aceastฤƒ imagine, se afiศ™eazฤƒ doar rezultatul final, aศ™a cum se aratฤƒ รฎn diagrama Py de mai jos.Torexemplu ch:

Diagrama de dispersie a rezultatului regresiei simple

Regresia este o รฎncฤƒlzire; clasificarea imaginilor exerseazฤƒ muศ™chii de รฎnvฤƒศ›are profundฤƒ ai lui PyTorch.

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 prima etapฤƒ a acestui PyTorexemplu de clasificare ch, veศ›i รฎncฤƒrca setul de date folosind modulul torchvision.

รŽnainte de a รฎncepe procesul de antrenament, trebuie sฤƒ รฎnศ›elegeศ›i datele. Torchvision va รฎncฤƒrca setul de date ศ™i va transforma imaginile cu cerinศ›ele corespunzฤƒtoare 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 PyTorDe exemplu, veศ›i crea o reศ›ea neuronalฤƒ simplฤƒ pentru PyTorClasificarea imaginilor ch.

Aici, vฤƒ prezentฤƒm o altฤƒ modalitate de a crea modelul de reศ›ea รฎn PyTorcap. Vom folosi nn.Sequential pentru a crea un model de secvenศ›ฤƒ รฎn loc sฤƒ creฤƒm o subclasฤƒ a 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 utiliza CrossEntropyLoss. Pentru optimizator, veศ›i utiliza SGD cu o ratฤƒ de รฎnvฤƒศ›are de 0.001 ศ™i un impuls de 0.9, aศ™a cum se aratฤƒ รฎn diagrama Py de mai jos.Torexemplu.

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

รŽntrebฤƒri frecvente

Da, pentru majoritatea cursanศ›ilor. PyTorexecuศ›ia nerฤƒbdฤƒtoare a lui ch, PythonAPI-ul ic ศ™i alinierea Hugging Face faciliteazฤƒ รฎnvฤƒศ›area. Sondajele aratฤƒ cฤƒ 60% dintre รฎncepฤƒtori aleg PyTorcap. รฎntรขi.

Asistenศ›i AI precum Copilot, Cursor ศ™i JetBrains AI genereazฤƒ PyTorbucle de antrenament ch, sugereazฤƒ arhitecturi de straturi ศ™i depaneazฤƒ erorile de formฤƒ tensoralฤƒ. Hugging Face Transformers include ศ™i PyTormodele ch-first.

Da. Instrumentele de inteligenศ›ฤƒ artificialฤƒ scheleazฤƒ clasele nn.Module, opศ›iunile de optimizare ศ™i buclele de antrenament. De asemenea, explicฤƒ erorile CUDA, sugereazฤƒ semnalizatoare de precizie mixtฤƒ ศ™i recomandฤƒ dimensiuni de lot pe baza formei setului de date.

PyTorch foloseศ™te grafice dinamice ศ™i dominฤƒ cercetarea. TensorFlow este lider รฎn implementarea รฎn producศ›ie pe mobil ศ™i edge prin TensorFlow Lite. Decalajul de performanศ›ฤƒ s-a redus datoritฤƒ torch.compile รฎn Py.Torch 2.

Aproximativ 85% din lucrฤƒrile de cercetare despre deep learning utilizeazฤƒ PyTorch รฎn 2026. Modelul grafic dinamic se potriveศ™te experimentฤƒrii, iar รฎntregul ecosistem LLM de la Hugging Face la vLLM este construit รฎn jurul PyTorch.

PyTorch ruleazฤƒ nativ pe procesoare CPU ศ™i GPU-uri CUDA, suportฤƒ ROCm pe GPU-uri AMD, MPS pe Apple Silicon ศ™i TPU-uri prin PyTorProiect XLA ch. Alegeศ›i dispozitivul potrivit cu apeluri .to().

Da, prin TorchServe, export ONNX ศ™i noul ExecuTorruntime ch. TensorFlow Lite rฤƒmรขne mai matur pentru mobil, dar PyTorch รฎnchide rapid decalajul รฎn ceea ce priveศ™te inferenศ›a la margine.

รŽncepฤƒtorii รฎศ™i construiesc prima reศ›ea รฎntr-o zi sau douฤƒ. Stฤƒpรขnirea CNN-urilor, a transformatoarelor, a instruirii distribuite ศ™i a implementฤƒrii รฎn producศ›ie dureazฤƒ de obicei รฎntre trei ศ™i ศ™ase luni de muncฤƒ constantฤƒ รฎn proiecte.

Rezumaศ›i aceastฤƒ postare cu: