cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020
-
9 mai 2011 à 14:11
marwenjava
Messages postés15Date d'inscriptionvendredi 10 février 2006StatutMembreDernière intervention17 octobre 2009
-
21 mai 2011 à 12:32
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
ce code la c'est ma première manipulation avec réseaux de neurones donc j’essayai d’être plus simple pour avoir une première résultat .
mais comme remarque ce code de point vue algorithmique il n'est pas juste et j'ai découvrir que le calcule du delta (Erreur quadratique )et la rétro-propagation ne sont pas juste , c vrai qu'il donne des bonnes résultats mais lorsque on augmente le nombre des entrés les résultats vont être fausse.
et de cela j'ai corrigé tous ces problèmes dans des autres codes(Reconnaissance de Visage , Détection suivi et prévision de mouvement à partir d'un flux vidéo ...etc ), ou j'ai travaillé avec l'orienté objet a 100% , j'ai remplacé l'utilisation des tableau par des Vector() avec : le nombre des couches cachés , le nombre neurones d'entrés , le nombre neurones de sorties ....etc tous sont paramétrables et n'ont plus fixe .
lynxtyle
Messages postés79Date d'inscriptionsamedi 25 septembre 2004StatutMembreDernière intervention31 octobre 20112 16 mai 2011 à 12:12
oui mais tu n'as pas compris mon commentaire : là tu créé un réseau de neuronne de taille totalement fixe : dans le cas où tu veux augmenter la taille de ton réseau tu dois rajouter copier coller un grand nombre de ligne... si tu défini tes variable en tableau (ex : po[i]) avec des boucles pour 1 to Max (Max étant une variable défini) alors tu peux créer le nombre de neurone que tu souahaite sans faire des pages et des pages de copier/coller...
les exemples que j'ai donné après étant la même chose que ton exemple mais en traitant un nombre important de pixel si tu n'intégre pas cette notion de tabeau/boucle tu ne seras pas rendu...
En espérent que tu as compris cette fois
souicioql
Messages postés24Date d'inscriptionmercredi 12 mai 2010StatutMembreDernière intervention26 mai 2011 16 mai 2011 à 10:17
un problème artificiel et sur un problème réel de filtrage, la nécessité
d'ajouter un terme de weight decay à la fonction de coût usuelle pour les problèmes où le
nombre d'exemples de la base d'apprentissage est limité.
lynxtyle
Messages postés79Date d'inscriptionsamedi 25 septembre 2004StatutMembreDernière intervention31 octobre 20112 16 mai 2011 à 09:25
Je rejoins JULIEN39 sur le point de l'utilisation de Java. Malgré tout on peut facilement comprendre l'intérêt d'avoir fait une telle chose (la programmation de neurone est à la base fonctionnelle... et avoir une réseau neuronal dans une application java pouvant facilement être utilisé en réseau ça peut avoir du bon^^).
Donc pour cette première partie je vais répondre ceci : un réseau neuronal est "une base de données" intelligente, donc tu devrais l'externaliser de Java et l'utiliser comme source de données (le développer par exemple en C++/socket et le faire communiquer avec Java par les sockets)
Passons et attaquons nous au code : alors je n'ai pas eu le temps de tout regarder mais dans une première approche il me semble que la taille de ton réseau de neurone est fixe... ce qui est interessant quand on développe un réseau de neurone c'est de lui donner une taille variable (tu pourras ainsi réutiliser ton code pour d'autres apprentissages).
Il me semble aussi que tu utilise un algorithme intelligent pour la reconnaissance de forme... sachant qu'il en existe d'autre algorithme pour d'autre type d'application, il serait judicieux de l'indiquer.
Pour aller plus loin voilà 2 exemples d'utilisation d'un tel réseau de neurone :
- le reconnaissance de signature (pour par exemple protéger le contenu de son application : cela devient en quelques sorte le mot de passe)<-comparaison dans la différence de formes
- la retrouver une plaque minéralogique effacé <- déduction de formes
(théoriquement ton réseau de neuronne serait capable sans modification de faire ces applications s'il était de taille variable, avec juste un bénole : il consommerait beaucoup [mais vraiment beaucoup trop] de mémoire)
Voilà je le regarderai plus en détail plus tard... je te met une note de 7,5/10 donc 8/10 (je suis plus indulgent que JULIEN39 sur le point du choix du Java car il y a un bon travail derrière)
Bon courage !
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020371 9 mai 2011 à 14:11
Je pense que du point de vue fonctionnel ton code doit être bon. Et je te félicite pour l'effort de documentation de ta source.
Par contre, je suis incapable de lire ton code, tu utilises Java pour faire de la programmation fonctionnelle, rassures toi, tu n'es pas le seul. Mais tu es un des rares à le faire pour écrire un code de cette complexité. Tu devrais pouvoir améliorer grandement ton code en utilisant une méthode d'analyse objet. De plus, il est assez simple de décomposer un réseau de neurones en objets plus simples. Mais bon, ce n'est peut être pas du tout ton but.
Tu dois surement avoir une formation de statisticien plus que d'informaticien.
Je te donnes une note de 6/10 parce que tu as fais un effort important de documentation et que l'essentiel est que le code tourne.
21 mai 2011 à 12:32
avant que je vous répond , touts d'abord je suis le propriétaire de ce code la (voila la preuve : http://www.javafr.com/codes/RESEAUX-NEURONES-FONCTION-LOGIQUES-RETROPROPAGATION-BEN-RACHED-MARWEN_47543.aspx )
j'ai publié ce code depuis deux ans :) (merci souicioql pour le copier coller lol et STP rappel moi le jour de ton anniversaire et je vais te donner deux autres codes comme cadeaux )
ce code la c'est ma première manipulation avec réseaux de neurones donc j’essayai d’être plus simple pour avoir une première résultat .
mais comme remarque ce code de point vue algorithmique il n'est pas juste et j'ai découvrir que le calcule du delta (Erreur quadratique )et la rétro-propagation ne sont pas juste , c vrai qu'il donne des bonnes résultats mais lorsque on augmente le nombre des entrés les résultats vont être fausse.
et de cela j'ai corrigé tous ces problèmes dans des autres codes(Reconnaissance de Visage , Détection suivi et prévision de mouvement à partir d'un flux vidéo ...etc ), ou j'ai travaillé avec l'orienté objet a 100% , j'ai remplacé l'utilisation des tableau par des Vector() avec : le nombre des couches cachés , le nombre neurones d'entrés , le nombre neurones de sorties ....etc tous sont paramétrables et n'ont plus fixe .
16 mai 2011 à 12:12
les exemples que j'ai donné après étant la même chose que ton exemple mais en traitant un nombre important de pixel si tu n'intégre pas cette notion de tabeau/boucle tu ne seras pas rendu...
En espérent que tu as compris cette fois
16 mai 2011 à 10:17
d'ajouter un terme de weight decay à la fonction de coût usuelle pour les problèmes où le
nombre d'exemples de la base d'apprentissage est limité.
16 mai 2011 à 09:25
Donc pour cette première partie je vais répondre ceci : un réseau neuronal est "une base de données" intelligente, donc tu devrais l'externaliser de Java et l'utiliser comme source de données (le développer par exemple en C++/socket et le faire communiquer avec Java par les sockets)
Passons et attaquons nous au code : alors je n'ai pas eu le temps de tout regarder mais dans une première approche il me semble que la taille de ton réseau de neurone est fixe... ce qui est interessant quand on développe un réseau de neurone c'est de lui donner une taille variable (tu pourras ainsi réutiliser ton code pour d'autres apprentissages).
Il me semble aussi que tu utilise un algorithme intelligent pour la reconnaissance de forme... sachant qu'il en existe d'autre algorithme pour d'autre type d'application, il serait judicieux de l'indiquer.
Pour aller plus loin voilà 2 exemples d'utilisation d'un tel réseau de neurone :
- le reconnaissance de signature (pour par exemple protéger le contenu de son application : cela devient en quelques sorte le mot de passe)<-comparaison dans la différence de formes
- la retrouver une plaque minéralogique effacé <- déduction de formes
(théoriquement ton réseau de neuronne serait capable sans modification de faire ces applications s'il était de taille variable, avec juste un bénole : il consommerait beaucoup [mais vraiment beaucoup trop] de mémoire)
Voilà je le regarderai plus en détail plus tard... je te met une note de 7,5/10 donc 8/10 (je suis plus indulgent que JULIEN39 sur le point du choix du Java car il y a un bon travail derrière)
Bon courage !
9 mai 2011 à 14:11
Par contre, je suis incapable de lire ton code, tu utilises Java pour faire de la programmation fonctionnelle, rassures toi, tu n'es pas le seul. Mais tu es un des rares à le faire pour écrire un code de cette complexité. Tu devrais pouvoir améliorer grandement ton code en utilisant une méthode d'analyse objet. De plus, il est assez simple de décomposer un réseau de neurones en objets plus simples. Mais bon, ce n'est peut être pas du tout ton but.
Tu dois surement avoir une formation de statisticien plus que d'informaticien.
Je te donnes une note de 6/10 parce que tu as fais un effort important de documentation et que l'essentiel est que le code tourne.