Durée: 12 mois
Rubrique: Ingénieur IA
Dans cette leçon, nous allons explorer la construction de réseaux neuronaux avec PyTorch, une bibliothèque populaire pour le Deep Learning qui offre une grande flexibilité et facilité d'utilisation.
Un réseau neuronal artificiel (ANN) est composé de couches de neurones connectées entre elles. Chaque neurone applique une fonction d'activation sur une combinaison linéaire de ses entrées. Les réseaux peuvent être utilisés pour diverses tâches comme la classification, la régression et la segmentation d'images.
Pour créer un réseau neuronal dans PyTorch, nous devons définir les couches du réseau en utilisant la classe torch.nn.Module
. Voici un exemple simple :
```python import torch import torch.nn as nn
class SimpleNN(nn.Module): def init(self): super(SimpleNN, self).init() self.fc1 = nn.Linear(784, 128) self.fc2 = nn.Linear(128, 10)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
```
Dans cet exemple :
nn.Linear(784, 128)
définit une couche linéaire avec 784 entrées et 128 sorties.
torch.relu
applique la fonction d'activation ReLU.
Après avoir défini le modèle, nous devons spécifier une fonction de perte et un optimiseur pour entraîner le réseau. PyTorch offre plusieurs options pour ces deux éléments.
python
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
Dans cet exemple :
nn.CrossEntropyLoss()
est adaptée pour les tâches de classification multiclasse.
torch.optim.SGD
est un optimiseur utilisant la descente de gradient stochastique.
Entraîner un modèle en PyTorch implique de passer par plusieurs étapes de propagation avant et arrière et de mise à jour des poids. Voici une boucle d'entraînement typique :
python
for epoch in range(numepochs):
for inputs, labels in trainloader:
optimizer.zerograd()
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
print(f'Epoch [{epoch+1}/{numepochs}], Loss: {loss.item():.4f}')
Pour évaluer le modèle, nous devons le mettre en mode évaluation et calculer les métriques de performance sur un ensemble de données de test.
python
model.eval()
with torch.nograd():
correct = 0
total = 0
for inputs, labels in testloader:
outputs = model(inputs)
, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print(f'Accuracy: {100 correct / total}%')
En résumé, PyTorch permet de créer, entraîner et évaluer des réseaux neuronaux de manière intuitive et flexible.
Pour une compréhension approfondie, n'hésitez pas à consulter la documentation officielle de PyTorch.