Le perceptron

Dans ce TP, on va écrire des scripts python (très simples) qui permettent de vérifier qu'un perceptron binaire réalise les prédictions qui sont attendues.

Verification des prédictions d'un perceptron

On va écrire un premier script qui détermine si un perceptron binaire ayant deux entrées prédit les valeurs attendues en sortie. On le mettra en application sur les fonctions logiques vues en cours (ET, OU, ...).

Perceptron binaire à 2 entrées

Le script doit contenir la liste des sorties attendues en fonction des entrées et les poids. Pour chacune des sorties, il doit vérifier qu'elle correspond bien à la sortie calculée pour les entrées. Il doit ensuite vérifier On va écrire un script python qui calcule la valeur en sortie d'un perceptron binaire.

On illustre sur le ET-logique à 2 entrées dont la table de vérité est :

e1e2s
00<0
01<0
10<0
11≥0

Le script doit donc commencer par :

  1. la liste des entrées possibles. Pour le ET logique, on aura une liste de listes, chaque sous-liste correspondant à l'une des combinaisons possibles en entrées.
    entrées = [[0, 0], [0, 1], [1, 0], [1, 1]]
  2. la liste des valeurs de la sortie pour chacune des combinaisons d'entrées, bien entendu dans le même ordre : le iè élément de cette liste doit correspondre au iè élément de la liste des entrées.
    sorties = [0, 0, 0, 1]
  3. la liste des poids, par exemple :
    poids = [-5, 3, 3]
    Le premier élément de cette liste (d'indice 0) est le biais.

Ces éléments étant définis, on peut maintenant vérifier si les sorties attendues correspondent aux sorties calculées par le perceptron avec les poids qui sont spécifiés.
Pour cela, on réalise une boucle qui itère sur chaque élément de la liste entrées. À chaque itération, on calcule la sortie du perceptron correspondant à ces valeurs en entrée et on compare cette valeur à la sortie attendue. Par exemple lors de la première itération :

  1. la combinaison en entrée est la première sous-liste de entrées, soit [0, 0], c'est-à-dire que l'entrée e1 vaut 0 (le premier 0 de la sous-liste) et l'entrée e2 vaut 0 (le second 0 de la sous-liste). Il ne faut pas oublier l'entrée qui vaut toujours 1 qui correspond au biais.
  2. On calcule la sortie correspond à cette entrée en utilisant les poids. C'est ce que l'on a fait lors du TP précédent. Appelons s la variable dans laquelle cette valeur est mémorisée. Dans le cas présent, -5+3x0+3x0 est négatif, donc la sortie vaut 0.
  3. On compare la valeur de s à la valeur attendue en sortie, c'est-à-dire le premier élément de la liste sorties. Donc on compare s à sorties [0]. Si ces deux valeurs diffèrent on affiche un message indiquant qu'il y a un problème. Par exemple, on peut faire un message comme Pour l'entrée numéro 0, la sortie n'est pas celle qui est attendues. ou un message un peu plus sophistiqué comme Pour l'entrée numéro 0 ([0, 0]), la sortie calculée (1) diffère de la sortie attendue (0).

À l'issue de toutes les itérations, si aucune erreur n'a été détectée, on peut afficher un message comme Aucune erreur détectée..

Faites tout ce qui précède et assurez-vous que votre script fonctionne correctement.

Pour finir le script

Vous ajouterez également un test pour vérifier que la liste des entrées contient autant d'également que la liste des sorties.
Enfin, vous ajouterez un test vérifiant que chaque sous-liste de entrées contient bien 2 éléments (2 car le perceptron possède 2 entrées et le biais).

Pour finir

Écrivez le script qui vient d'être décrit. Testez-le sur le ET logique puis sur les autres fonctions logiques que l'on a vu en cours (OU, NON-ET, NON-OU).

Perceptron binaire avec « beaucoup » d'entrées

On va maintenant écrire un deuxième script python qui effectue la même vérification pour un nombre quelconque d'entrées. Comme exemple, on prendra l'afficheur vu en cours mais il faut que votre script puisse fonctionner pour n'importe quel liste d'entrées et n'importe quel nombre de poids.

Pour cette exemple, on a maintenant 7 entrées et 8 poids. On a également 10 combinaisons d'entrées et leurs sorties associées.
On définira une variable dénommée Npoids qui contient le nombre de poids, donc 8 pour cet exemple.

Le script est presque le même que précédemment. Il suffit de combiner ce que vous venez de faire avec ce que vous avez fait lors du TP précédent.

Une fois que vous avez fait tout cela, vérifiez que les poids vus en cours permettent de calculer correctement la parité du chiffre qui est affiché.

Pour finir

Pour finir, vous m'envoyez vos 2 scripts par email, en mettant votre binôme en cc.