![](https://images.squarespace-cdn.com/content/v1/6321d1a0e854dc2d6d3a2a9c/6f41f337-526e-4a68-8da2-c9b46d01f008/Image9.jpg)
Le langage de programmation PASCAL a été inventé dans les années 1970 - rigoureux, hautement structuré, délibérément pédagogique … à l’image du maître.
Ci-dessous un exemple de code - généré automatiquement par l’IA générative ChatGPT - pour apprendre un réseau de neurones avec rétropropagation
program neural_network;
const
N = 100; // nombre d'observations
D = 2; // nombre de variables d'entrée
H = 5; // nombre de neurones dans la couche cachée
C = 2; // nombre de classes de sortie
type
TData = array[1..N, 1..D] of real; // données d'entrée
TWeights1 = array[1..D, 1..H] of real; // poids de la couche cachée
TWeights2 = array[1..H, 1..C] of real; // poids de la couche de sortie
TActivations = array[1..N, 1..H+1] of real; // valeurs d'activation
var
data: TData;
y: array[1..N] of integer; // variables de sortie (0 ou 1)
weights1: TWeights1; // poids de la couche cachée
weights2: TWeights2; // poids de la couche de sortie
activations: TActivations; // valeurs d'activation
alpha: real; // taux d'apprentissage
num_iter: integer; // nombre d'itérations
function sigmoid(z: real): real;
begin
sigmoid := 1 / (1 + exp(-z));
end;
function softmax(x: array of real): array of real;
var
i: integer;
sum: real;
begin
SetLength(softmax, Length(x));
sum := 0;
for i := 0 to High(x) do
begin
softmax[i] := exp(x[i]);
sum := sum + softmax[i];
end;
for i := 0 to High(x) do
softmax[i] := softmax[i] / sum;
end;
procedure forward_pass(data: TData; var activations: TActivations; weights1: TWeights1; weights2: TWeights2);
var
i, j, k: integer;
z: real;
begin
for i := 1 to N do
begin
for j := 1 to H do
begin
z := 0;
for k := 1 to D do
z := z + data[i,k] * weights1[k,j];
activations[i,j] := sigmoid(z);
end;
activations[i,H+1] := 1; // biais
end;
end;
procedure backward_pass(data: TData; y: array of integer; activations: TActivations; var weights1: TWeights1; var weights2: TWeights2; alpha: real);
var
i, j, k: integer;
error, delta: real;
delta1, delta2: array[1..H+1] of real;
grad1: TWeights1;
grad2: TWeights2;
begin
// calcul de l'erreur de la couche de sortie
for i := 1 to N do
begin
for j := 1 to C do
begin
error := y[i] - softmax([activations