IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

reseau de neurones artificiel


Sujet :

Python

  1. #1
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 71
    Points
    71
    Par défaut reseau de neurones artificiel
    Bonjour.

    comme le dit l'intitulé, je souhaite programmer un reseau de neurones artificiel. Pour le moments je désire principalement faire de la reconnaissance de caractères et ainsi acquérir les compétences fondamentales en RNA. Je veux l'écrire en python car c'est le langage que je métrise le plus ( 4 ans environs / C++ 1 mois )

    J'ai trouver un nombre incalculable de doc, pdf et animations, qui expliquent le fonctionnement théorique d'un RNA dans à peu prés tout les domaines. Mais aucun exemples concrets. Après plusieurs jours de lectures, et même de réflexion sur papier (parce que je sais qu'on ne réalise pas un projet comme sa sur un coup de tête) j'ai commencer à coder.

    j'ai organiser mon programme en plusieurs fichiers.
    traitement__texte.py --> qui contient les classes pour la reconnaissance de texte et l’apprentissage de texte du réseau.
    traitement__image.py --> ...
    traitement__son.py --> ...
    Reseau.py --> qui contient la classe de création du reseau et sa gestion.
    c'est un peu compliquer, je posterais un .zip

    Bon, pour ce qui mon lut jusque la
    Imaginons que j'ai un réseau pour le traitement de texte. Avec mes lectures, j'ai très bien compris comment extraire chaque caractères du texte scanner. (une projection orthogonale des pixels ...). j'obtient ainsi, normalement, une image par caractères. Il me reste plus qu'a l'analyser après lui avoir appliquer un filtre haut et un redimensionnement (exemple : en 32x32) . C'est la que ce situe le problème.

    je penser balayer l'image du caractère avec une grille, par exemple, de dimension 3x3 (c'est à dire avec un réseau de 9 neurones en entrées). mon soucis est que je ne sais pas gérer les sorties. si l'image est de 32x32 je devrais avoir (en prenons en compte que j'utiliser une grille 3x3) 30² = 900 neurones en sorties ? sa me parais vraiment improbable. surtout que dans les exemples que je trouve il y a, au maximum, 10 sorties

    il y-a t'il une erreur dans mon raisonnement ? (je suis presque sur que oui)
    l'un d'entre vous à déjà programmer un réseau de neurone ?
    bref ... quelqu'un à t-il la solution à mon problème ?

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    Bonjour,

    Je ne veux pas te décourager d'entrée mais implémenter des réseaux de neurones n'est pas une tâche triviale. Si la structure de donnée n'est pas vraiment complexe les algorithmes d'entrainement sont assez ardus à implémenter en sans doute totalement impraticable en python pure du fait de la charge de calcul.

    Je te conseillerais plutôt l'utilisation d'un module existant comme ffnet si tu veux t'amuser un peu avec.

    Maintenant pour ton problème je pense que d'entrée la tailles de tes imagettes est trop grande. Tu devrais plutôt partir d'images beaucoup plus petites (8x8 ?). En suite la structure typique d'un réseau serait une première couche avec un neurone d'entrée par pixel. Une deuxième couche cachée et la dernière couche dépend de ce que tu veux apprendre à ton réseau.

    Plusieurs approches sont possibles :

    1. un neurone de sortie auquel tu apprends une valeur différente par lettre
    2. log_2(N) neurones de sorties (N étant le nombre de caractères à apprendre). Il s'agit alors d'apprendre un code binaire. Par exemple pour le i-eme caractere on met la valeur des neurones de sorties aux valeurs des bits représentant i en binaire.
    3. N réseaux à un neurone de sortie. Là on essaie d'apprendre à chaque réseau à dire si le caractère présenté et bien celui pour lequel il a été entrainé.


    En espérant que ces indications te soient utiles...

    Alexis

  3. #3
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 71
    Points
    71
    Par défaut
    Un réseau de neurone peut être implémenté en python. Théoriquement, même en basic . seulement, c'est le temps de calcul qui diffère. Je programme en python depuis longtemps, j'aurais bien voulu le faire en C++ mais je n'est commencer il n'y a qu'un mois.

    J'avais déjà penser à diminuer la taille des images. en 8x8 sa me laisse encore 64 neurones de sortie. Avec ces 64 neurone,je pense que le réseau est beaucoup trop précis. et ne pourra reconnaître que une forme d'écriture spécifique, voir deux. Or il y a vraiment des centaines de façons d'écrire. ( je ne veut pas tous les reconnaitres, juis pas fou hein !). Alors je me suis dit, pourquoi ne pas mettre autant de neurone en entrée qu'il y a de pixel et un nombre fixe de sortie.
    c'est à dire ici: 64 entrées, n cachées, 6 sorties ( par exemple ). je vais essayé cette méthode

    dans tes propositions:
    1 c'est une bonne idée
    2 c'est aussi une bonne idée mais plus compliquer à réaliser
    3 si je souhaite faire une reconnaissance manuscrite il y a environ 89 caractères que nous utilisons. Je devrais donc faire 89 réseaux. Et tester chaque caractère avec tous les réseaux pour le déterminer. sa me parais de loin le plus long

    Mais maintenant, imaginons que après je souhaite faire de la reconnaissance de forme. Et que mon image est de la résolution de mon écran. 1680x1050. je ne pense pas que 1 764 000 neurones en entrés soit possibles. peut êtres que diminuer la dimension de l'images et associés plusieurs pixel à un neurone et une solution ( on retrouve ma grille )

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    Quand je disais que c'était impraticable en python, c'était bien entendu pour des raisons de temps de calcul, les structures de données étant relativement simples.

    Tu évoques le problème d'avoir 64 neurones en sortie, je ne comprends pas. Il s'agit plutôt du nombre de neurones d'entrée ici le nombre de pixel. Faut voir ton réseau comme une boite noire. Tu lui donnes des données en entrée et pendant la phase d'apprentissage tu lui apprends à reproduire la sortie voulue.
    C'est en fait un problème de régression. La partie difficile est de savoir ce que tu donnes en entrée (pré-traitements) et sous quelle forme tu veux ta sortie.

    En effet il est parfois préférable de ne pas donner en entrée les données brutes (ici les pixels) mais plutôt le résultats de prétraitements (par exemple une batterie de filtres).

    La sortie va typiquement dépendre de ce tu cherches à faire (régression/classification).

    Pour faire de la reconnaissance de forme sur une grosse image il faut garder en tête le fait que ton image a une échelle typique d'observation et que c'est à cette échelle qu'il faut essayer de la détecter/reconnaitre. Par exemple si tu as un ballon qui remplit toute l'image, ça ne serti à rien de faire de la reconnaissance sur une image 100x100, une image beacoup plus petite sera suffisante. Typiquement on pratiquera une procédure de fenêtre glissante sur l'image de départ puis sur des versions réduite (sous-échantillonage) et préalablement floutée par un filtre gaussien pour éviter l'"aliasing". On appelle ça les pyramides gaussienne. Ca permet d'observer ton image à plusieurs échelles.

    Si lis l'anglais et que tu le désires tu peux par exemple lire la littérature autour de la base MNIST (reconnaissance de chiffres manuscrits) http://yann.lecun.com/exdb/mnist/, le défi PASCAL 2007 (reconnaissance/détection d'objets) http://pascallin.ecs.soton.ac.uk/cha...s/VOC/voc2007/

Discussions similaires

  1. Reconnaissance de forme par reseau de neurone artificiel
    Par tefymahery dans le forum MATLAB
    Réponses: 0
    Dernier message: 04/11/2013, 16h01
  2. Reseau de neurones artificiel avec entrées à valeurs réelles
    Par TristanL dans le forum Méthodes prédictives
    Réponses: 3
    Dernier message: 12/05/2011, 10h39
  3. Application reseau de neurone sur python!
    Par tnouss dans le forum Calcul scientifique
    Réponses: 3
    Dernier message: 15/04/2007, 20h18
  4. reseau de neurone
    Par elekis dans le forum Méthodes prédictives
    Réponses: 1
    Dernier message: 17/02/2006, 20h00
  5. Besoin d'aide classifieur SVM et reseau de neurones
    Par dahoo dans le forum Méthodes prédictives
    Réponses: 2
    Dernier message: 12/04/2005, 14h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo