reseau de neurones simple
by oeeckhoutte
HTML
<html>
<head>
<title>Reseau de neurones simple</title>
<script>
let inputData = [0, 1, 0, 1]
</script>
</head>
<body onload='reset()'>
<table>
<tr>
<td>Output 0 : </td>
<td id="out0">0</td>
</tr>
<tr>
<td>Output 1 : </td>
<td id="out1">0</td>
</tr>
<tr>
<td>
<input type="button" value="Reset" onclick="reset(); display();">
</td>
<td>
<input type="button" value="Propagate" onclick="propagate(inputData); display();">
</td>
</tr>
</table>
</body>
</html>
JavaScript
let Wh = [];
let Wo = [];
let input = [];
let hidden = [];
let output = [];
const display = () => {
document.getElementById('out0').innerHTML = output[0];
document.getElementById('out1').innerHTML = output[1];
}
const propagate = (d) => {
// On copie les données dans la couche d'entrée
for (let i = 0; i < input.length; i++) {
input[i] = d[i];
}
// On propage dans la couche cachée
// Xh contient les sommes cumulées pour la couche cachée
let Xh = [0, 0, 0, 0];
for (let j = 0; j < hidden.length; j++) {
for (let i = 0; i < input.length; i++) {
Xh[j] += Wh[j][i] * input[i];
}
}
// On applique la fonction d'activation
for (let j = 0; j < hidden.length; j++) {
hidden[j] = sigmoid(Xh[j]);
}
// On propage dans la couche de sortie
// Xo contient les sommes pondérées de chaque neurone de sortie
let Xo = [0, 0];
for (let k = 0; k < output.length; k++) {
for (let j = 0; j < hidden.length; j++) {
Xo[k] += Wo[k][j] * hidden[j];
}
}
// On applique la fonction d'activation
for (let k = 0; k < output.length; k++) {
output[k] = sigmoid(Xo[k]);
}
}
const sigmoid = (x) => {
return 1 / (1 + Math.pow(Math.E, (-1 * x)));
}
const reset = () => {
input = [0, 0, 0, 0];
hidden = [0, 0, 0, 0];
output = [0, 0];
// 0.5 a été choisi totalement arbitrairement
// En pratique, on aurait pu générer des valeurs aléatoires distribuées uniformément sur l'intervalle [-1; 1] et dont la moyenne aurait été nulle.
Wh = [[0.5, 0.5, 0.5, 0.5],
[0.5, 0.5, 0.5, 0.5],
[0.5, 0.5, 0.5, 0.5],
[0.5, 0.5, 0.5, 0.5]];
Wo = [[0.5, 0.5, 0.5, 0.5],
[0.5, 0.5, 0.5, 0.5]];
}