Archives de catégorie : Recherche

Présentation lors de la conférence EANN 2011

Les dernières avancées de mes travaux seront présentés dans le cadre des 12th EANN / 7th AIAI Joint Conferences :: 15 – 18 September 2011, Corfu, Greece, Engineering Applications of Neural Networks / Artificial Intelligence Applications and Innovations

Cette présentation sera basée sur l’article « Large datasets: a mixed method to adapt and improve their learning by neural networks used in regression contexts » co-rédigé avec Pr Contassot-Vivier Sylvain, Dr Salomon Michel et Dr Henriet Julien.

Voici l’abstract de l’article :

The purpose of this work is to further study the relevance of accelerating the Monte-Carlo calculations for the gamma rays external radiotherapy through feed-forward neural networks. We have previously presented a parallel incremental algorithm that builds neural networks of reduced size, while providing high quality approximations of the dose deposit.
Our parallel algorithm consists in an optimized decomposition of the initial learning dataset (also called learning domain) in as much subsets as available processors. However, although that decomposition provides subsets of similar signal complexities, their sizes may be quite different, still implying potential differences in their learning times. This paper presents an efficient data extraction allowing a good and balanced training without any loss of signal information. As will be shown, the resulting irregular decomposition permits an important improvement in the learning time of the global network.

Et le plus important le lien sur la conférence : EANN 2011

[ad#Google Adsense]

Java versus C++ (2nd round)

j’avais mis en ligne un premier résultat de test montrant que Java pouvait concurrence C++ dans le registre de la performance.

Afin de compléter ce premier résultat, j’ai poursuivi ma comparaison en accroissant le volume de calcul à réaliser ( volume des données et précision de calcul). Ce 2nd résultat confirme le premier test et encore une fois, la version Java de mon programme est autant performante (ou aussi peu pour les mauvaises langues) que ma version C++.

Voici les résultats :

C++/MPI

nb Dec Tps moyen Tps tot Prec moy Prec U
1 693,49 693,49 -5,39E-004 8,51E-004
2 689,225 1378,45 1,50E-005 7,65E-004
4 496,445 1985,78 -5,48E-005 5,12E-005
8 212,62 1700,96 2,54E-005 1,43E-005
16 89,039375 1424,63 3,14E-005 8,89E-006

Java/Jace

nb Dec Tps moyen Tps tot Prec moy Prec U
1 608,1793823242 608,1793823242 4,87E-007 1,53E-003
2 596,3627929688 1192,7255859375 -1,43E-004 7,35E-004
4 492,4767684937 1969,9070739746 -4,16E-010 4,22E-004
8 197,4866099358 1579,8928794861 -1,61E-005 8,70E-005
16 88,004909873 1408,0785579681 6,35E-006 1,15E-005

Voici les conditions de test :

Java utilisée :
java version « 1.6.0_16 »
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) 64-Bit Server VM (build 14.2-b01, mixed mode)

C++ : (Configuration du mésocentre)
Option d’optimisation -O2 (à vérifier la compatibilité de cette option
avec ICC)
Compilateur : ICC
MPI : openMPI (Intel)

L’ensemble des tests ont été réalisé sur mésoshared un jour de calme ^^

[ad#Google Adsense]

Java Vs C++

Quand un logiciel est en cours de phase initial ou lors d’un changement majeur, la question du choix du langage peut être posé.

Mon projet étant essentiellement basé sur de l’apprentissage de réseau de neurones, la performance se doit être maximum … Et pour beaucoup, C++ s’imposerait donc sans équivoque.

[ad#Google Adsense]

Oui mais, cette évidence est peut être à remettre en cause. Dans mon cas, et pour des raisons de recherche, j’ai réalisé une version Java et une version C++, ce qui donnera en parallèle, une version utilisant MPI et l’autre utilisante JaceMPI, un environnement en cours de développement.

Le premier résultat est sans équivoque, pour un apprentissage rapide :

C++ => 11.8 s
Java => 10.7 s

La différence n’est pas flagrante … mais le langage en tête n’est pas celui attendu.

[ad#Google Adsense]

Le premier n° de Mathematica Æterna est sorti

Ce premier numéro est relativement léger et propose le contenu suivant :

Paul Bracken
Surfaces of Arbitrary Constant Negative Gaussian Curvature and Related Sine-Gordon Equations
Math.Aeterna,Vol.1, 2011, no. 01, 1-11

Samy Skander Bahoura
sup X inf inequality on manifold of dimension 3
Math. Aeterna, Vol.1, 2011, no. 01, 12 – 25

Daiheng Ni
Multiscale Modeling of Traffic Flow
Math. Aeterna, Vol.1, 2011, no. 01, 26 – 53

Arun Kumar, Ram Dayal Pankaj and Chandra Prakash Gupta
Description of a wave-wave interaction model by Variational and Decomposition methods
Math. Aeterna, Vol. 1, 2011, no. 01, 54 – 62

Comme c’est une revue en open acces, il est librement lisible à cette adresse : http://www.e-hilaris.com/volume1.html

Bonne lecture

[ad#Google Adsense]

DoseViewer, interface graphique pour Neurad

Quelques petites informations sur le projet Neurad.

Bien que le site de Neurad soit maintenant fermé depuis quelques mois, son développement est toujours en cours. Ces derniers temps, le travail a surtout porté sur l’interfaçage du logiciel.

Le choix du Toolkit graphique reste QT et je vous propose un premier aperçu d’écan :

C’est du basique et il reste encore du travail, mais maintenant que les premières briques sont placées, le reste devrait avancer plus rapidement. Tout est une question de priorité.

Si vous avez des remarques ou des demandes particulières, n’hésitez pas.

[ad#Google Adsense]

Toujours lire les warnings … ils peuvent être plus génants que des erreurs …

3 sessions de travail, 3 sessions à me battre avec Eclipse, Hibernate et Tomcat pour comprendre pourquoi aucune de mes configurations ne marchait.

3 Sessions à tricher, à rechercher où coller mes fichiers de configuration pour qu’ils soient pris en compte …

3 sessions à avancer pas à pas, sans comprendre pourquoi tout ne marchait pas comme prévu, à ne pas comprendre le pourquoi des problèmes …

Jusqu’à ce moment où j’ai pensé à lire les warnings, tous les warnings …
———————————————-
Description Resource Path Location TypeClasspath entry WebContent/WEB-INF/classes will not be exported or published. Runtime ClassNotFoundExceptions may result.
———————————————-

Et voilà, j’avais oublié de cocher une case pour la construction de mon ClassPath, et le répertoire local de mon application n’était pas pris en compte … et donc Hibernate ne retrouvait pas ses fichiers … La case cochée, tout est rentré dans l’ordre …

Un warning qu’il faudrait peut être passer en erreur …

Astuces systèmes

1 Manipulation de fichier.

Travaillant actuellement sous plusieurs système, je me suis retrouvé à avoir des fichiers mal encodés … résultat, dans un même projet, j’avais des fichiers en ISO-XxX et d’autre en UTF-8. Donc pour homogénéiser le tout, le plus simple est d’utiliser la commande Linux suivante :

file nom_du_fichier > Permet de connaître l’encodage utilisé

iconv -f type_initial -t type_voulu nomFichier > nouveauFichier

Et le problème est résolu.

[ad#Google Adsense]

Astuce de prog

Cet article/section n’est pas un. Il va simplement me permettre de lister une petite série d’astuces ou de techniques qui peuvent être utiles … et que l’on met souvent un temps fou à retrouver.

Astuce 1 : Spécifier le nombre de digits d’un nombre (Très utile quand le lecteur associé aux programmes demande un format strict)

Utilisation de la STL

std::ostringstream oss;
oss <<std::setw(3)<<std::setfill('0')<<rg;

la fonction fill va permettre de présenter le nombre rg avec obligatoirement 3 digits (120 -> 120 mais 1 -> 001)

[ad#Google Adsense]

Astuce 2 : Faire un tri rapide sur une liste.

Si vous avez besoin de QT dans votre développement, et que à certains moment, vous devez faire appel à des techniques de tri … Le plus simple est de laisser à l’environnement QT faire le tri à votre place.

Pour ce faire, il suffit d’utiliser des QList et, son tri se limitera à l’appel à la fonction suivante :

qSort(listeMat.begin(), listeMat.end(), qGreater<int>());

Dans ce context, listeMat correspond à une liste d’entier, mais si vous travaillez sur des listes d’objets, il suffit de ré-implementer les méthodes qGreater pour votre objet.