import torch.nn as nn # neural network module import torch.nn.functional as F # On va utiliser le dataset MNIST pour tester notre modèle, # il contient des images de chiffres manuscrits(0-9) de 28x28 pixels # MNIST est déjà disponible dans la librairie torchvision.datasets, # on peut l'importer et l'utiliser facilement. # cette fois ci on aura pas besoin de creer une classe Dataset personnalisée, # Le Dataset est déjà dans PyTorch, on peut l'utiliser directement. # MNIST composé de 60000 images pour l'entrainement et 10000 images pour le test, # si on avait des images brutes, on pouvait partir de # la classe Dataset pour créer notre propre classe Dataset personnalisée, # L'objective c'est de faire la classification de ces images, # c'est à dire prédire le chiffre représenté sur l'image class Lenet5(nn.Module): def __init__(self, n_classes=10): super().__init__() self.conv1 = nn.Conv2d(1, 6, kernel_size=5) self.pool1 = nn.AvgPool2d(2, 2) self.conv2 = nn.Conv2d(6, 16, kernel_size=5) self.pool2 = nn.AvgPool2d(2, 2) self.conv3 = nn.Conv2d(16, 120, kernel_size=5) self.linear1 = nn.Linear(120, 84) self.linear2 = nn.Linear(84, n_classes) def forward(self, image): x = F.tanh(self.conv1(image)) x = F.tanh(self.pool1(x)) x = F.tanh(self.conv2(x)) x = F.tanh(self.pool2(x)) x = F.tanh(self.conv3(x)) x = x.view(x.size(0), -1) x = F.tanh(self.linear1(x)) x = self.linear2(x) # ← logits bruts, CrossEntropyLoss gère le softmax return x