Réseau de neurones et OCR
Pour une de mes matières, je dois programmer un réseau de neurones capable de reconnaître des caractère dactylographiés (OCR). Ils sont représentés en 5*5.
Je dois utiliser un réseau récurrent caractérisé par une interconnexion complète, des poids et des seuils réels, des connexions symétriques. Le réseau est initialisé à 0.5 pour les poids et 0 pour les seuils.
Pour l'apprentissage, l'activation des cellules est asynchrone.
Mon prof a donné le début du programme, que j'ai un peu modifié pour des soucis de compréhension.
Voici ce qu'il a écrit pour le début du programme :
Ca fait 2 semaines que je me prends la tête dessus et il y a tellement d'élèves perdus dans ma classe que je ne parviens JAMAIS à lui poser toutes les questions que j'ai. Il donne quelques indications en cours pour tout le monde, mais je ne sais pas si c'est lui qui ne se met pas à notre niveau ou juste nous qui sommes trop cons. C'est un peu mon dernier espoir ici.
Voici ce que j'ai écrit (j'ai modifié certains éléments de son programme) :
Mes questions :
- Est-ce que déjà je pars sur la bonne piste ? J'avais pensé à partir sur une boucle
- Pourquoi ça ne fonctionne pas ici ?
- Quelles sont les différentes étapes pour arriver à reconnaître au moins une lettre ?
Si une âme charitable aurait l'extrême amabilité de m'aider dans ma détresse, j'en serais tellement reconnaissante.
Je dois utiliser un réseau récurrent caractérisé par une interconnexion complète, des poids et des seuils réels, des connexions symétriques. Le réseau est initialisé à 0.5 pour les poids et 0 pour les seuils.
Pour l'apprentissage, l'activation des cellules est asynchrone.
Mon prof a donné le début du programme, que j'ai un peu modifié pour des soucis de compréhension.
Voici ce qu'il a écrit pour le début du programme :
point = "#" N = 5 # nombre de lignes (et de colonnes) d'une forme N_cell = N*N # états des cellules du réseau (booléens) etats = [0 for _ in range(N_cell) ] # seuils des cellules du réseau (réels) seuils = [ 0.0 for _ in range(N_cell) ] # poids des connexions du réseau (réels) poids = [ [ 0.5 for _ in range(N_cell)] for _ in range(N_cell) ] exemple_a_reconnaitre = [ [True, False, True, False, True], [True, True, False, False, True], [False, False, True, False, True], [True, False, False, True, True], [True, False, False, False, True] ] alphabet = \ [ [ [False, True, True, True, False], # { A } [True, False, False, False, True], [True, True, True, True, True], [True, False, False, False, True], [True, False, False, False, True] ], [ [True, True, True, True, False], # { B } [True, False, False, False, True], [True, True, True, True, False], [True, False, False, False, True], [True, True, True, True, False] ], [ [False, True, True, True, True], # { C } [True, False, False, False, False], [True, False, False, False, False], [True, False, False, False, False], [False, True, True, True, True] ], [ [True, True, True, True, False], # { D } [True, False, False, False, True], [True, False, False, False, True], [True, False, False, False, True], [True, True, True, True, False] ], [ [True, True, True, True, True], # { E } [True, False, False, False, False], [True, True, True, False, False], [True, False, False, False, False], [True, True, True, True, True] ], [ [True, True, True, True, True], # { F } [True, False, False, False, False], [True, True, True, False, False], [True, False, False, False, False], [True, False, False, False, False] ], [ [True, True, True, True, True], # { G } [True, False, False, False, False], [True, False, False, False, False], [True, False, False, False, True], [True, True, True, True, True] ], [ [True, False, False, False, True], # { H } [True, False, False, False, True], [True, True, True, True, True], [True, False, False, False, True], [True, False, False, False, True] ], [ [False, False, True, False, False], # { I } [False, False, True, False, False], [False, False, True, False, False], [False, False, True, False, False], [False, False, True, False, False] ], [ [False, False, True, True, True], # { J } [False, False, False, True, False], [False, False, False, True, False], [False, False, False, True, False], [True, True, True, True, False] ], [ [True, False, False, False, True], # { K } [True, False, False, True, False], [True, True, True, False, False], [True, False, False, True, False], [True, False, False, False, True] ], [ [True, False, False, False, False], # { L } [True, False, False, False, False], [True, False, False, False, False], [True, False, False, False, False], [True, True, True, True, True] ], [ [True, True, False, True, True], # { N } [True, False, True, False, True], [True, False, False, False, True], [True, False, False, False, True], [True, False, False, False, True] ], [ [True, False, False, False, True], # { M } [True, True, False, False, True], [True, False, True, False, True], [True, False, False, True, True], [True, False, False, False, True] ], [ [False, True, True, True, False], # { O } [True, False, False, False, True], [True, False, False, False, True], [True, False, False, False, True], [False, True, True, True, False] ], [ [True, True, True, True, False], # { P } [True, False, False, False, True], [True, True, True, True, False], [True, False, False, False, False], [True, False, False, False, False] ], [ [True, True, True, True, True], # { Q } [True, False, False, False, True], [True, False, False, False, True], [True, False, False, True, True], [True, True, True, True, True] ], [ [True, True, True, True, False], # { R } [True, False, False, False, True], [True, True, True, True, False], [True, False, False, True, False], [True, False, False, False, True] ], [ [False, True, True, True, True], # { S } [True, False, False, False, False], [False, True, True, True, False], [False, False, False, False, True], [True, True, True, True, False] ], [ [True, True, True, True, True], # { T } [False, False, True, False, False], [False, False, True, False, False], [False, False, True, False, False], [False, False, True, False, False] ], [ [True, False, False, False, True], # { U } [True, False, False, False, True], [True, False, False, False, True], [True, False, False, False, True], [False, True, True, True, False] ], [ [True, False, False, False, True], # { V } [True, False, False, False, True], [True, False, False, False, True], [False, True, False, True, False], [False, False, True, False, False] ], [ [True, False, False, False, True], # { W } [True, False, False, False, True], [True, False, False, False, True], [True, False, True, False, True], [False, True, False, True, False] ], [ [True, False, False, False, True], # { X } [False, True, False, True, False], [False, False, True, False, False], [False, True, False, True, False], [True, False, False, False, True] ], [ [True, False, False, False, True], # { Y } [False, True, False, True, False], [False, False, True, False, False], [False, False, True, False, False], [False, False, True, False, False] ], [ [True, True, True, True, True], # { Z } [False, False, False, True, False], [False, False, True, False, False], [False, True, False, False, False], [True, True, True, True, True] ] ] def affiche_forme (forme) : for i in range(N) : for j in range(N) : if forme[i][j] : print (point,end="") else : print (" ",end="") print ("\n")
Ca fait 2 semaines que je me prends la tête dessus et il y a tellement d'élèves perdus dans ma classe que je ne parviens JAMAIS à lui poser toutes les questions que j'ai. Il donne quelques indications en cours pour tout le monde, mais je ne sais pas si c'est lui qui ne se met pas à notre niveau ou juste nous qui sommes trop cons. C'est un peu mon dernier espoir ici.
Voici ce que j'ai écrit (j'ai modifié certains éléments de son programme) :
point = "#" N = 5 # nombre de lignes (et de colonnes) d'une forme N_cell = N*N # états des cellules du réseau (booléens) etats = [0 for _ in range(N_cell) ] # seuils des cellules du réseau (réels) seuils = [ 0.0 for _ in range(N_cell) ] # poids des connexions du réseau (réels) poids = [ [ 0.5 for _ in range(N_cell)] for _ in range(N_cell) ] exemple_a_reconnaitre = [ [1, 0, 1, 0, 1],[1, 1, 0, 0, 1],[0, 0, 1, 0, 1], [1, 0, 0, 1, 1], [1, 0, 0, 0, 1]] lettreA = [[0, 1, 1, 1, 0], [1, 0, 0, 0, 1], [1, 1, 1, 1, 1], [1, 0, 0, 0, 1], [1, 0, 0, 0, 1]] def affiche_forme (forme) : for i in range(N) : for j in range(N) : if forme[i][j] : print (point,end="") else : print (" ",end="") print ("\n") affiche_forme (lettreA) #_____________________________________________________________________________ affiche_forme (exemple_a_reconnaitre) print (etats) print (seuils) print (poids) ne = [] compteur = 0 if compteur < 24 : for i in range (25) : for j in range (25): ne += etats[i]*poids[i][j] compteur = compteur + 1 else : print ("voici la liste des nouveaux états",ne)
Mes questions :
- Est-ce que déjà je pars sur la bonne piste ? J'avais pensé à partir sur une boucle
whilemais je ne sais pas comment l'écrire.
- Pourquoi ça ne fonctionne pas ici ?
- Quelles sont les différentes étapes pour arriver à reconnaître au moins une lettre ?
Si une âme charitable aurait l'extrême amabilité de m'aider dans ma détresse, j'en serais tellement reconnaissante.
A voir également:
- Réseau de neurones et OCR
- Free ocr - Télécharger - Divers Bureautique
- Mot de passe reseau - Guide
- Opérateur de réseau mobile - Guide
- Simple ocr - Télécharger - Bureautique
- Le message n'a pas été envoyé car le service n'est pas activé sur le réseau - Forum Xiaomi
2 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonsoir, es-tu certaine d'avoir choisi des études qui vont te permettre de progresser?
xyouna
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
C'est un cours obligatoire, je n'ai pas le choix. Merci de votre aide.
Bonjour,
Prenons le message dans l'ordre.
Programme de l'énoncé
- On construit une liste de matrice, chaque matrice représentant une lettre de l'alphabet. Plus précisément, chaque matrice 5x5 correspond à une matrice de pixels, où
- La boucle finale permet d'afficher dans un terminal les matrices sous une forme plus visuelles (
Digression
Par rapport à ta question "est-ce que nous sommes trop c***", non je ne pense pas. Si vous êtes pleins à vous poser des questions, c'est sans doute qu'en l'état, votre professeur n'a pas donné assez d'information.
Après, je ne sais pas si son but est de vous faire chercher sur Internet comment entraîner un réseau de neurones. Ce n'est pas quelque chose qui me choque, s'il vous a bien dit que vous auriez à chercher pour trouver. D'un point de vue pédagogique ça se tient, car l'informatique est un domaine où on passe son temps à chercher sur Internet "la bonne manière de faire" ou comment résoudre tel ou tel message d'erreur.
Précisions sur l'exercice
Par rapport à ce que tu as commencé à écrire :
- Tu n'as pas besoin de modifier le code de ton professeur. Il faut juste le compléter.
- Le but est d'entraîner un réseau de neurones M de sorte à ce que si tu lui passes une lettre en entrée il t'indique de laquelle il s'agit.
- Généralement un réseau de neurones consiste à partir d'un vecteur d'entrée X à sortir un vecteur de sortie Y obtenu en appliquant le réseau de neurones à X. Dans ton cas X, correspondrait un vecteur pour lequel chaque cellule correspond à un pixel. Le vecteur Y serait typiquement un vecteur de taille 26, où la i-ième cellule vaut 1 si c'est la ième lettre, 0 sinon (ou du moins, une valeur proche).
- Toute la difficulté, c'est entraîner le réseau de neuronne pour que f(X) = Y si f désigne ton réseau de neurones. Pour cela tu peux commencer par lire cet article sur les réseaux de neurones récurrents. Ensuite le but est de trouve sur Internet ou dans ton cours comment entraîner un tel réseau.
Par rapport à ce que tu as commencé à coder
Pour passer une matrice sous forme d'une ligne, tu peux écrire directement :
Bonne chance
Prenons le message dans l'ordre.
Programme de l'énoncé
- On construit une liste de matrice, chaque matrice représentant une lettre de l'alphabet. Plus précisément, chaque matrice 5x5 correspond à une matrice de pixels, où
Truecorrespond à un pixel noir et
Falseà un pixel blanc.
- La boucle finale permet d'afficher dans un terminal les matrices sous une forme plus visuelles (
'#'pour les pixels noirs,
' 'pour les pixels blancs).
Digression
Par rapport à ta question "est-ce que nous sommes trop c***", non je ne pense pas. Si vous êtes pleins à vous poser des questions, c'est sans doute qu'en l'état, votre professeur n'a pas donné assez d'information.
Après, je ne sais pas si son but est de vous faire chercher sur Internet comment entraîner un réseau de neurones. Ce n'est pas quelque chose qui me choque, s'il vous a bien dit que vous auriez à chercher pour trouver. D'un point de vue pédagogique ça se tient, car l'informatique est un domaine où on passe son temps à chercher sur Internet "la bonne manière de faire" ou comment résoudre tel ou tel message d'erreur.
Précisions sur l'exercice
Par rapport à ce que tu as commencé à écrire :
- Tu n'as pas besoin de modifier le code de ton professeur. Il faut juste le compléter.
- Le but est d'entraîner un réseau de neurones M de sorte à ce que si tu lui passes une lettre en entrée il t'indique de laquelle il s'agit.
- Généralement un réseau de neurones consiste à partir d'un vecteur d'entrée X à sortir un vecteur de sortie Y obtenu en appliquant le réseau de neurones à X. Dans ton cas X, correspondrait un vecteur pour lequel chaque cellule correspond à un pixel. Le vecteur Y serait typiquement un vecteur de taille 26, où la i-ième cellule vaut 1 si c'est la ième lettre, 0 sinon (ou du moins, une valeur proche).
- Toute la difficulté, c'est entraîner le réseau de neuronne pour que f(X) = Y si f désigne ton réseau de neurones. Pour cela tu peux commencer par lire cet article sur les réseaux de neurones récurrents. Ensuite le but est de trouve sur Internet ou dans ton cours comment entraîner un tel réseau.
Par rapport à ce que tu as commencé à coder
Pour passer une matrice sous forme d'une ligne, tu peux écrire directement :
#!/usr/bin/env python3 def matrix_to_vector(matrix): return [value for row in matrix for value in row] letter = [ [False, True, True, True, False], # { A } [True, False, False, False, True], [True, True, True, True, True], [True, False, False, False, True], [True, False, False, False, True] ] x = matrix_to_vector(letter) print(x)
Bonne chance