PyTorTutoriel ch
โก Rรฉsumรฉ intelligent
PyTorch est le framework d'apprentissage profond open-source de Meta, qui alimente dรฉsormais 85 % des articles de recherche en IA en 2026. LessCes modules couvrent l'installation, les bases du framework, la rรฉgression simple, la classification d'images et le dรฉploiement d'AWS SageMaker.

Qu'est-ce que PyTorch?
PyTorch est un open-source TorBibliothรจque d'apprentissage automatique basรฉe sur ch pour le traitement du langage naturel utilisant PythonIl est similaire ร NumPy, mais avec une prise en charge GPU performante. Il offre des graphes de calcul dynamiques que vous pouvez modifier ร la volรฉe grรขce ร autograd.Torch est รฉgalement plus rapide que certains autres frameworks. Il a รฉtรฉ dรฉveloppรฉ par le groupe de recherche en IA de Facebook en 2016.
Connaรฎtre ce que PyTorch propose une analyse รฉquilibrรฉe de ses points forts et de ses points faibles.
PyToravantages et inconvรฉnients
Voici les avantages et les inconvรฉnients de PyTorch:
Avantages de PyTorch
- Bibliothรจque simplifiรฉe
PyTorLe code ch est simple. Il est facile ร comprendre et vous pouvez utiliser la bibliothรจque immรฉdiatement. Par exemple, regardez l'extrait de code ci-dessous :
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
Comme mentionnรฉ ci-dessus, vous pouvez dรฉfinir facilement le modรจle de rรฉseau et comprendre le code rapidement sans trop de formation.
- Graphique informatique dynamique
Source de l'image : Explorer l'apprentissage profond avec PyTorch
PyTorch propose des graphes de calcul dynamiques (DAG). Les graphes de calcul permettent d'exprimer des expressions mathรฉmatiques ร l'aide de modรจles ou de thรฉories graphiques, tels que des nลuds et des arรชtes. Chaque nลud effectue l'opรฉration mathรฉmatique, et chaque arรชte est un tenseur qui est transmis aux nลuds et transporte leur rรฉsultat sous forme de tenseur.
DAG est un graphique qui a une forme arbitraire et capable d'effectuer des opรฉrations entre diffรฉrents graphiques d'entrรฉe. ร chaque itรฉration, un nouveau graphique est crรฉรฉ. Ainsi, il est possible dโavoir la mรชme structure de graphe ou de crรฉer un nouveau graphe avec une opรฉration diffรฉrente, ou encore on peut lโappeler un graphe dynamique.
- Meilleures performances
Les communautรฉs et les chercheurs รฉvaluent et comparent les frameworks pour voir lequel est le plus rapide. Un dรฉpรดt GitHub Benchmark sur les frameworks de Deep Learning et les GPU Py a signalรฉ que PyTorch est plus rapide que les autres frameworks en termes d'images traitรฉes par seconde.
Comme vous pouvez le voir ci-dessous, les graphiques de comparaison avec vgg16 et resnet152
- Originaire Python
PyTorch est davantage basรฉ sur Python. Par exemple, si vous souhaitez entraรฎner un modรจle, vous pouvez utiliser le flux de contrรดle natif tel que looping et des rรฉcursions sans avoir besoin d'ajouter de variables ou de sessions spรฉcifiques pour pouvoir les exรฉcuter. Ceci est trรจs utile pour le processus de formation.
PyTorch implรฉmente รฉgalement la programmation impรฉrative et offre une plus grande flexibilitรฉ. Il est donc possible d'afficher la valeur du tenseur en cours de calcul.
Inconvรฉnient de PyTorch
PyTorch nรฉcessite des applications tierces pour la visualisation. Il requiert รฉgalement un serveur API pour la production.
Prochain article sur PyTorDans ce tutoriel, nous apprendrons la diffรฉrence entre PyTorch et TensorFlow.
PyTorch contre TensorFlow
| Paramรจtres | PyTorch | TensorFlow |
|---|---|---|
| Dรฉfinition du modรจle | Le modรจle est dรฉfini dans une sous-classe et propose un package facile ร utiliser | Le modรจle est dรฉfini avec plusieurs et vous devez comprendre la syntaxe |
| Prise en charge du GPU | Oui | Oui |
| Type de graphique | Dynamique | Statique |
| Outils | Aucun outil de visualisation | Vous pouvez utiliser l'outil de visualisation Tensorboard |
| Communautรฉ | La communautรฉ continue de s'agrandir | De grandes communautรฉs actives |
Compte tenu de cette comparaison, l'รฉtape suivante consiste ร obtenir PyTorch exรฉcutรฉ localement ou dans le cloud.
Installation de PyTorch
Linux
Il est simple de l'installer sous Linux. Vous pouvez choisir d'utiliser un environnement virtuel ou de l'installer directement avec un accรจs root. Tapez cette commande dans le terminal
pip3 install --upgrade torch torchvision
AWS Sagemaker
Sagemaker est l'une des plateformes de Amazon Service Web qui offre un puissant moteur d'apprentissage automatique avec des configurations d'apprentissage en profondeur prรฉinstallรฉes permettant aux scientifiques des donnรฉes ou aux dรฉveloppeurs de crรฉer, former et dรฉployer des modรจles ร n'importe quelle รฉchelle.
Ouvrez d'abord le Amazon Faiseur de sauge console et cliquez sur Crรฉer une instance de notebook et remplissez tous les dรฉtails de votre notebook.
รtape suivante, cliquez sur Ouvrir pour lancer votre instance de notebook.
Enfin, dans JupyterCliquez sur Nouveau et choisissez conda_pytorch_p36 ; votre instance de notebook est alors prรชte ร รชtre utilisรฉe avec Py.Torch installรฉ.
Prochain article sur PyTorDans ce tutoriel, nous allons apprendre Py.TorPrincipes de base du cadre ch.
L'installation รฉtant en place, l'API elle-mรชme est la prochaine รฉtape.
PyTorBases du cadre ch
Apprenons les concepts de base de PyTorch avant de plonger dans le vif du sujet. PyTorch utilise des tenseurs pour chaque variable, ร l'instar des tableaux NumPy (ndarray), mais avec la prise en charge du calcul sur GPU. Nous allons ici expliquer le modรจle de rรฉseau, la fonction de perte, la rรฉtropropagation et l'optimiseur.
Modรจle de rรฉseau
Le rรฉseau peut รชtre construit en sous-classant torch.nn. Il y a 2 parties principales,
- La premiรจre partie consiste ร dรฉfinir les paramรจtres et les calques que vous utiliserez
- La deuxiรจme partie est la tรขche principale appelรฉe processus avancรฉ qui prendra une entrรฉe et prรฉdira la sortie.
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()
Comme vous pouvez le voir ci-dessus, vous crรฉez une classe de nn.Module appelรฉe Model. Il contient 2 calques Conv2d et un calque linรฉaire. La premiรจre couche conv2d prend une entrรฉe de 3 et la forme de sortie de 20. La deuxiรจme couche prendra une entrรฉe de 20 et produira une forme de sortie de 40. La derniรจre couche est une couche entiรจrement connectรฉe en forme de 320 et produira une sortie de 10.
Le processus forward prendra une entrรฉe de X et la transmettra ร la couche conv1 et exรฉcutera la fonction ReLU,
De mรชme, il alimentera รฉgalement la couche conv2. Aprรจs cela, le x sera remodelรฉ en (-1, 320) et alimentera la couche FC finale. Avant d'envoyer la sortie, vous utiliserez la fonction d'activation softmax.
Le processus en arriรจre est automatiquement dรฉfini par autograd, il vous suffit donc de dรฉfinir le processus en avant.
Fonction de perte
La fonction de perte sert ร mesurer la capacitรฉ du modรจle de prรฉdiction ร prรฉdire les rรฉsultats attendus. PyTorch dispose dรฉjร de nombreuses fonctions de perte standard dans le module torch.nn. Par exemple, vous pouvez utiliser la perte d'entropie croisรฉe pour rรฉsoudre un problรจme Py multiclasse.Torproblรจme de classification ch. Il est facile de dรฉfinir la fonction de perte et de calculer les pertes :
loss_fn = nn.CrossEntropyLoss() #training process loss = loss_fn(out, target)
Il est facile d'utiliser votre propre calcul de fonction de perte avec PyTorch.
Contre-propriรฉtรฉ
Pour effectuer la rรฉtropropagation, vous appelez simplement los.backward(). L'erreur sera calculรฉe mais n'oubliez pas d'effacer le dรฉgradรฉ existant avec zero_grad()
net.zero_grad() # to clear the existing gradient loss.backward() # to perform backpropragation
Optimizer
Le torch.optim fournit des algorithmes dโoptimisation courants. Vous pouvez dรฉfinir un optimiseur en une รฉtape simple :
optimizer = torch.optim.SGD(net.parameters(), lr = 0.01, momentum=0.9)
Vous devez transmettre les paramรจtres du modรจle de rรฉseau et le taux d'apprentissage afin qu'ร chaque itรฉration, les paramรจtres soient mis ร jour aprรจs le processus de backprop.
La meilleure faรงon d'apprendre l'API est de rรฉaliser un petit exemple complet.
Rรฉgression simple avec PyTorch
Apprenons la rรฉgression simple avec PyTorexemples ch :
รtape 1) Crรฉation de notre modรจle de rรฉseau
Notre modรจle de rรฉseau est une simple couche linรฉaire avec une forme d'entrรฉe et de sortie 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)
Et la sortie rรฉseau devrait รชtre comme รงa
Net( (hidden): Linear(in_features=1, out_features=1, bias=True) )
รtape 2) Tester les donnรฉes
Avant de commencer le processus de formation, vous devez connaรฎtre nos donnรฉes. Vous crรฉez une fonction alรฉatoire pour tester notre modรจle. Oui = x3 pรฉchรฉ(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()
Voici le nuage de points de notre fonction :
Avant de commencer le processus d'entraรฎnement, vous devez convertir le tableau numpy en variables prises en charge par Torch et autograd comme indiquรฉ dans le Py ci-dessousTorExemple de rรฉgression 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)
รtape 3) Optimiseur et perte
Ensuite, vous devez dรฉfinir l'optimiseur et la fonction de perte pour notre processus de formation.
# Define Optimizer and Loss Function optimizer = torch.optim.SGD(net.parameters(), lr=0.2) loss_func = torch.nn.MSELoss()
รtape 4) Formation
Commenรงons maintenant notre processus de formation. Avec une รฉpoque de 250, vous itรฉrerez nos donnรฉes pour trouver la meilleure valeur pour nos hyperparamรจtres.
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()
รtape 5) Rรฉsultat
Comme vous pouvez le constater ci-dessous, vous avez exรฉcutรฉ Py avec succรจs.TorRรฉgression ch avec un rรฉseau de neurones. En rรฉalitรฉ, ร chaque itรฉration, la ligne rouge du graphique se met ร jour et change de position pour s'adapter aux donnรฉes. Mais sur cette image, seul le rรฉsultat final est affichรฉ, comme indiquรฉ dans le code Py ci-dessous.TorExemple ch :
La rรฉgression est un รฉchauffement ; la classification d'images sollicite les capacitรฉs d'apprentissage profond de Python.Torch.
Exemple de classification d'images avec PyTorch
L'une des mรฉthodes populaires pour apprendre les bases de l'apprentissage en profondeur est avec l'ensemble de donnรฉes MNIST. C'est le ยซ Hello World ยป dans le deep learning. L'ensemble de donnรฉes contient des nombres manuscrits de 0 ร 9 avec un total de 60,000 10,000 รฉchantillons d'apprentissage et 28 28 รฉchantillons de test dรฉjร รฉtiquetรฉs avec une taille de ร pixels.
รtape 1) Prรฉtraiter les donnรฉes
Dans la premiรจre รฉtape de ce PyTorDans cet exemple de classification ch, vous chargerez l'ensemble de donnรฉes ร l'aide du module torchvision.
Avant de commencer le processus de formation, vous devez comprendre les donnรฉes. Torchvision chargera l'ensemble de donnรฉes et transformera les images en fonction des exigences du rรฉseau, notamment en modifiant leur forme et en normalisant les 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()
La fonction de transformation convertit les images en tenseur et normalise la valeur. La fonction torchvision.transforms.MNIST tรฉlรฉchargera l'ensemble de donnรฉes (s'il n'est pas disponible) dans le rรฉpertoire, dรฉfinira l'ensemble de donnรฉes pour la formation si nรฉcessaire et effectuera le processus de transformation.
Pour visualiser l'ensemble de donnรฉes, vous utilisez le data_iterator pour obtenir le prochain lot d'images et d'รฉtiquettes. Vous utilisez matplot pour tracer ces images et leur รฉtiquette appropriรฉe. Comme vous pouvez le voir ci-dessous nos images et leurs รฉtiquettes.
รtape 2) Configuration du modรจle de rรฉseau
Maintenant, dans ce PyTorPar exemple, vous allez crรฉer un rรฉseau neuronal simple pour Py.Torclassification d'images ch.
Nous vous prรฉsentons ici une autre faรงon de crรฉer le modรจle de rรฉseau en Python.Torch. Nous utiliserons nn.Sequential pour crรฉer un modรจle de sรฉquence au lieu de crรฉer une sous-classe 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)
Voici le rรฉsultat de notre modรจle de rรฉseau
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() )
Explication du rรฉseau
- La sรฉquence est que la premiรจre couche est une couche Conv2D avec une forme d'entrรฉe de 1 et une forme de sortie de 10 avec une taille de noyau de 5.
- Ensuite, vous avez une couche MaxPool2D
- Une fonction d'activation ReLU
- une couche Dropout pour supprimer les valeurs de faible probabilitรฉ.
- Puis un deuxiรจme Conv2d avec la forme d'entrรฉe de 10 de la derniรจre couche et la forme de sortie de 20 avec une taille de noyau de 5
- Ensuite une couche MaxPool2d
- Fonction d'activation ReLU.
- Aprรจs cela, vous aplatirez le tenseur avant de l'insรฉrer dans le calque linรฉaire.
- La couche linรฉaire mappera notre sortie sur la deuxiรจme couche linรฉaire avec la fonction d'activation softmax
รtape 3) Former le modรจle
Avant de dรฉmarrer le processus de formation, il est nรฉcessaire de configurer la fonction de critรจre et d'optimisation.
Pour le critรจre, vous utiliserez la perte d'entropie croisรฉe (CrossEntropyLoss). Pour l'optimiseur, vous utiliserez la descente de gradient stochastique (SGD) avec un taux d'apprentissage de 0.001 et un momentum de 0.9, comme indiquรฉ dans le code Python ci-dessous.Torch exemple.
import torch.optim as optim criterion = nn.CrossEntropyLoss() optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
Le processus avancรฉ prendra la forme d'entrรฉe et la transmettra ร la premiรจre couche conv2d. Ensuite, ร partir de lร , il sera introduit dans maxpool2d et enfin mis dans la fonction d'activation ReLU. Le mรชme processus se produira dans la deuxiรจme couche conv2d. Aprรจs cela, l'entrรฉe sera remodelรฉe en (-1,320 ) et alimentera la couche fc pour prรฉdire la sortie.
Maintenant, vous allez commencer le processus de formation. Vous parcourrez notre ensemble de donnรฉes 2 fois ou avec une รฉpoque de 2 et imprimerez la perte actuelle tous les 2000 lots.
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
ร chaque รฉpoque, l'รฉnumรฉrateur obtiendra le prochain tuple d'entrรฉe et les รฉtiquettes correspondantes. Avant d'alimenter notre modรจle de rรฉseau, nous devons effacer le gradient prรฉcรฉdent. Ceci est nรฉcessaire car aprรจs le processus inverse (processus de rรฉtropropagation), le gradient sera accumulรฉ au lieu d'รชtre remplacรฉ. Ensuite, nous calculerons les pertes de la production prรฉvue ร partir de la production attendue. Aprรจs cela, nous ferons une rรฉtropropagation pour calculer le gradient, et enfin, nous mettrons ร jour les paramรจtres.
Voici le rรฉsultat du processus de formation
[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
รtape 4) Testez le modรจle
Aprรจs avoir entraรฎnรฉ notre modรจle, vous devez tester ou รฉvaluer avec d'autres ensembles d'images.
Nous utiliserons un itรฉrateur pour le test_loader, et il gรฉnรฉrera un lot d'images et d'รฉtiquettes qui seront transmises au modรจle entraรฎnรฉ. La sortie prรฉvue sera affichรฉe et comparรฉe ร la sortie attendue.
#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()










