La fonction init_perceptron
permet d'initialiser un
perceptron en fonction des bases d'entrée et de sortie
et
.
function net=init_perceptron(X,Y,n1,num_reseau)
// X : base d'entree
// Y : base de sortie
// n1 : nb de neurones couche cachee
// num_reseau : numero d'identification du reseau
rand('normal'); // choix de la loi normale
rand('seed',num_reseau); // initialisation de la série aléatoire
[n0,K]=size(X);
[n2,K]=size(Y);
net.w1=rand(n1,n0)/sqrt(n0);
net.w2=rand(n2,n1)/sqrt(n1);
endfunction;
remarques :
- en Scilab, on ne déclare pas les variables. Dans une fonction, les variables qui ne sont pas les arguments de la fonction (en entrée ou en sortie) sont des variables locales. Les valeurs n0, K et n2 sont déduites de la taille des bases d'entrée et de sortie avec la fonction size.
- L'objet
net
contient l'ensemble des caractéristiques du réseau. Dans le cas présenté, il contient les poids w1
et w2
.
- Les poids initiaux sont tirés selon une loi gaussienne. En supposant arbitrairement les entrées gaussiennes, on multiplie les matrices obtenues par les scalaire 1/sqrt(n0) et 1/sqrt(n1) pour ramener l'ecart-type de l'entrée des neurones proche de 1.
Après initialisation, les matrices net.w1 et net.w2
contiennent les poids du réseau.
la fonction propagation
calcule la sortie du réseau en fonction de l'entrée qu'on lui applique.
function y=propagation(net,x)
// net : le reseau
// x : vecteur d'entree
x1 = phi(net.w1*x);
y = net.w2 * x1;
endfunction;
On remarquera que dans le modèle proposé, seule la couche cachée contient des unités non linéaires. On a donc littéralement
,
et
.