Question

de votre expérience, ce qui est l'approche la plus efficace pour mettre en œuvre des prototypes de réseaux de neurones artificiels? Il y a beaucoup de battage médiatique sur R (gratuit, mais je ne fonctionnait pas avec elle) ou Matlab (pas libre), un autre choix possible est d'utiliser un langage comme C ++ / Java / C #. La question vise principalement les personnes qui ont essayé de tester certaines architectures ou des algorithmes d'apprentissage des réseaux de neurones.

Si votre choix est d'utiliser un langage de programmation différent des trois mentionnés ci-dessus, pouvez-vous me dire leurs noms et quelques explications concernant votre choix (à l'exception: c'est le seul / le plus utilisé langue connue par moi).

Merci.

Était-ce utile?

La solution

Étant donné que les réseaux de neurones sont utilisés beaucoup par les scientifiques, et non pas tant par les programmeurs, choisissez un langage de programmation qui cible les scientifiques et fournit de bonnes bibliothèques pour les réseaux de neurones.

Python est un choix raisonnable car il est largement utilisé par les scientifiques. Deux distributions pour commencer sont

http://www.pythonxy.com/

http://code.enthought.com/

Ces distributions Python comprennent beaucoup d'ajouter des modules qui ne sont pas dans la bibliothèque standard de Python, mais qui sont très utiles pour le type de programmation que les scientifiques. Recherche dans l'index de package Python est fourni avec quelques paquets de réseau de neurones qui peuvent être OK si vous êtes en train d'apprendre sur les réseaux de neurones.

http://pypi.python.org/pypi?:action= recherche & terme = neurale & submit = recherche

Cependant, si vous faites un travail sérieux avec Neural Networks vous voulez quelque chose comme la bibliothèque rapide Neural Network. Cela vient avec les liaisons Python afin que vous puissiez faire votre programmation en Python, utilisez la grande variété de modules Python pour la représentation graphique, la visualisation, la manipulation des données et ainsi de suite. Mais, vos réseaux de neurones fonctionneront en utilisant le code compilé optmised de la bibliothèque FANN. Le meilleur des deux mondes.

En d'autres termes, pour exécuter le code de réseau de neurones réel, vous avez besoin C, pas Java. Étant donné que les bibliothèques C n'intègrent pas bien avec Java, choisissez une langue qui n'intègre en douceur avec des bibliothèques C. Python fait cela et est également un peu plus productif que Java car il y a beaucoup moins de lignes de code nécessaires pour expliquer vos algorithmes. Certaines personnes ont trouvé 10 fois augmentation de la productivité sur Java.

Vous avez mentionné R, peut-être parce qu'il a des fonctions statistiques que vous auriez besoin d'utiliser, ou peut-être vous avez des gens disponibles qui peuvent écrire du code R. Encore une fois, le choix de Python par rapport R n'est pas non plus ou décision. Vous pouvez utiliser les deux.

La bibliothèque RPY permet aux programmes Python d'accéder aux bibliothèques de R et le code. L'utilisation de ce que vous écrivez vos programmes principaux en Python et traiter R comme un outil pour fournir aux bibliothèques, de la même manière que vous utilisez de la bibliothèque FANN qui a été écrit en C.

http://rpy.sourceforge.net/

Il y a un autre module appelé RSPython qui fonctionne dans les deux sens, de sorte que les programmes de R peuvent accéder à des bibliothèques écrites en Python. Ce serait utile si vous avez un programmeur R expert pour vous aider.

http://www.omegahat.org/RSPython/

Et ce n'est pas tout. Vous pouvez tirer parti de Python pour simplifier la programmation Java. Si vous avez un moteur de réseau de neurones Java, vous pouvez toujours écrire la plupart de votre programme en Python en utilisant la version Jython qui fonctionne sur la machine virtuelle Java et vous permet d'utiliser toutes les bibliothèques et les classes Java dans votre code. Et vous pouvez toujours utiliser la bibliothèque FANN rapide et car ils offrent des liaisons pour les programmes Java.

La raison principale que je recommande Python pour votre travail est qu'il est utilisé par un très grand nombre de scientifiques qui est pourquoi il y a deux distributions orientées données scientifiques disponibles. Une deuxième raison est que Python est très facile pour les programmeurs débutants pour commencer avec, et dans l'exploration des réseaux de neurones vous aurez probablement commencer par des simulations plus simples et travailler jusqu'à plus complexes avec plus de manipulation de données et l'analyse des résultats. Python vous permettra de créer votre propre bibliothèque de code, et devenir un programmeur Python d'experts afin que vous puissiez vous concentrer plus votre attention sur les problèmes du réseau de neurones. Si vous rebondir autour avec un peu de Java, et un peu de C ++ et un peu de R, alors vous serez en mesure de passer moins de temps sur les réseaux de neurones. Cette stratégie pourrait être bon pour Someone qui veut une carrière dans la programmation, mais pas pour quelqu'un qui veut obtenir des résultats significatifs avec les réseaux de neurones.

Même si votre travail de réseau de neurones se prolonge dans le matériel spécialisé, soi-disant puces neuromorphiques, vous pouvez toujours tirer parti de Python comme cet article du NIH démontre:

http://www.ncbi.nlm.nih.gov/pmc / articles / PMC2701676 /

Autres conseils

J'essayé d'utiliser les deux langues de niveau supérieur d'abstraction (Matlab, Java) et inférieurs (C). Les deux en utilisant des bibliothèques et des boîtes à outils et les coder moi-même. La réponse globale? Ni est l'outil parfait. S'il vous plaît garder à l'esprit que:

  • un prototype pourrait ne pas être suffisant: souvent vous devez exécuter le réseau sur de grands échantillons, ou à plusieurs reprises sur un sous-ensemble d'échantillons (dans le cas des réseaux de neurones en évolution) pour obtenir des résultats décents. Si vous devez exécuter un réseau d'un million de fois, même un petit gain de performance pourrait être d'une grande aide et gain de temps (par exemple C sur Matlab);

  • si, d'autre part, vous avez besoin de facilité vous voudrez peut-être de codage à utiliser l'une des nombreuses bibliothèques pré-emballés (javaNN, etc.);

  • quel type de réseau de neurones utilisez-vous? les réseaux de neurones (CTRNN) à temps continu récurrent? Backprop? Comment allez-vous les formez? Comment pouvez-vous vérifier leurs résultats? Est une précision importante? (À savoir que vous les exécuter sur un petit appareil, comme une carte de contrôle robotique mémoire limitée, comme Arduinos?)

Si vous avez du temps libre, je vous suggère

  1. apprendre les concepts en utilisant un langage de niveau supérieur, ou même pseudocode premier;
  2. une fois que vous connaissez toutes les subtilités, en particulier en cas d'utilisation des réseaux de neurones en constante évolution, choisissez une langue qu'ils connaissent déjà
  3. alors vous voudrez peut-être commencer à rechercher comment optimiser la vitesse, l'empreinte mémoire, etc.

Hope this helps.

Je l'ai utilisé boîte à outils réseau Neural de Matlab dans une certaine mesure, et apprécié comme un outil de prototypage grâce à son interface graphique pour vous permettre de mettre en place le réseau, l'expérience avec des tailles de formation vs données d'entrée de test, et son post la formation à l'essai tous construit. Il m'a semblé agréable et naturel de commencer avec ...

J'ai aussi expérimenté avec Joone (Java Object Oriented Neural Engine). Il est mis en place tout à fait bien, et au moment où j'étais un peu d'un amateur et avait encore aucun problème pour divers réseaux et en cours d'exécution, avec des tests. Il est Java, donc il ne peut pas avoir les performances que vous voudrez peut-être si vous êtes de formation de grands systèmes complexes, mais son API était extrêmement accessible.

Je l'ai vu aussi un travail fait avec Flood en C ++. Il a un tas de classes mis en place avec des réseaux qui sont appropriés pour résoudre une série de problèmes. Il vaut la peine de vérifier.

Je recommande également très python. Pour un prototype, python est un excellent choix: il est plus facile et plus rapide à programmer, il y a un grand nombre de bibliothèques disponibles, et largement utilisé dans la communauté scientifique.

En outre, si vous utilisez python, vous pouvez également profiter de l'excellent PyBrain package qui contient des algorithmes pour les réseaux de neurones, apprentissage par renforcement, apprentissage non supervisé, et d'autres tâches d'apprentissage de la machine, ce qui devrait vous aider à construire un prototype rapidement.

Cela dépend de votre configuration actuelle. Lorsque je travaillais sur les dans de collège, je devais utiliser C ++ + MPI + recettes numériques. Cela a été fait parce que je devais charger part sur grand cluster Beowulf.

Si vos besoins de calcul ne sont pas grand, quoi que ce soit ferait. bibliothèques préemballées sont disponibles sur toutes les plateformes (R, Python (numpy, scipy), C / C ++ (recettes numériques) etc). Si vous êtes la programmation en l'un d'eux, il ne devrait pas être un gros problème.

Si je devais prototype quelque chose maintenant, je serais probablement aller avec Python (juste parce que je trouve qu'il est beaucoup plus facile pour le prototypage)

Scilab est une alternative open source à Matlab.

Vous pouvez expérimenter avec les réseaux de neurones en utilisant le ANN Boîte à outils pour Scilab .

Mise au point sur la théorie et les expériences. Avez-vous choisi les caractéristiques discriminantes pour vos échantillons? Quel est l'état de votre formation et de test. Pour chaque expérience, étudier la matrice de confusion. Avez-vous une idée pourquoi un échantillon est mal classé? Est-il semble logique de vous? Dans le cas contraire, qui disposent de ne pas utiliser aiderait?

Mise en œuvre vient ensuite, utiliser la langue que vous connaissez. Un langage managé comme Java ou C # est susceptible d'être moins sujette aux erreurs: au moins vous êtes moins susceptible de bousiller les choses en raison de pointeur ou bogues allocation de mémoire. Optimizing vient en dernier (après un certain profilage décent comme toujours).

"Encog est un réseau neuronal avancé et le cadre de l'apprentissage machine. Encog contient des classes pour créer une grande variété de réseaux, ainsi que des classes de soutien pour normaliser et traiter les données pour ces réseaux de neurones. Trains Encog utilisant la propagation élastique multithread. Encog peut également utiliser un GPU pour plus de temps de traitement de la vitesse. une table de travail GUI est également fourni pour aider à modéliser et à former des réseaux de neurones. Encog est en développement actif depuis 2008 ».

Encog est disponible pour Java, C # .Net et Silverlight.

http://www.heatonresearch.com/encog

Dans mes classes nn à l'école, nous avons utilisé Matlab et j'ai utilisé java pour ma thèse.

Je suggère java ou Matlab. Matlab parce qu'il a probablement déjà beaucoup de ce que vous pourriez avoir besoin. Et java parce qu'il est rapide à mettre en œuvre ce qui pourrait manquer dans les projets open source. Et d'ailleurs, depuis la mise en œuvre En outre de réseaux de neurones, vous pourriez avoir besoin d'une certaine façon de les visualiser. Et pour cela, je crois personnellement que java ou Matlab est assez facile.

J'aime contre les inondations. Il est gratuit, complet et écrit en C ++.

Les implémentations Matlab sont sophistiquées et complètes. Je l'ai trouvé d'être suffisant pour évaluer les différents types de réseaux. Il est également très programmable à l'aide d'interfaces externes.

Cependant, les implémentations des algorithmes ne sont pas open source, il est parfois plus difficile lorsque vous devez déplacer un élément particulier de code dans une application en dehors de Matlab, comme ma main implémentations codés de différents types de réseaux de neurones produits différents résultats.

J'ai commencé à écrire une implémentation en C ++ NN et a constaté que je ne savais pas assez sur les mathématiques impliqués au début. Ce qui a fini par hapenning était qu'il était trop difficile à factoriser le code que je peaufinage le modèle de calcul.

Finalement, je lui ai donné dans Matlab comme il était sans aucun doute un meilleur compagnon pour apprendre comment fonctionnent les réseaux de neurones. J'ai pu faire d'énormes changements de l'algorithme en utilisant quelques traits principaux et représenter graphiquement les résultats aussi.

Peut-être que mon expérience aurait été mieux si je l'avais utilisé un cadre de calcul de la matrice déjà construit. Considérant que comment vous le faire 3D il devrait y avoir quelques bibliothèques vraiment optimisés là-bas pour la plupart des langues. Heck vous pourriez aussi bien tirer parti de Direct3D ou OpenGL pour cela, mais je suis sûr qu'il ya quelque chose de plus approprié pour les réseaux de neurones là-bas.

Je suppose que je ne fournit pas beaucoup d'informations sur ce que vous devriez faire. Je peux cependant dire ce que vous ne devriez pas faire -. Et qui essaie d'écrire vous-même le code de manipulation de matrice

Vous pouvez donner Weka un regard . Il a des outils intégrés pour des choses comme la visualisation des données, et il est depuis des années maintenant ( quelques captures d'écran ).

À mon avis à travailler avec les réseaux de neurones la clé reçoit la formation mis en droit de ne pas tant comment le réseau lui-même est actualisé dans le code. Je choisirais une langue en fonction du type de problème que vous essayez de résoudre en utilisant le réseau. Pour le réseau lui-même c ++, c #, python et java sont tous viables.

Utilisez-vous cela dans le cadre d'un problème nécessitant un traitement d'image? Dans ce cas, vous voudrez probablement quelque chose qui accroche à une bibliothèque de traitement d'images comme OpenCV facilement. Ou est-il un traitement audio impliqué?

Vous devrez peut-être visualiser facilement la formation définit donc la facilité serait-ce avec la langue de choix? Pouvez-vous travailler soit avec les bibliothèques OpenGL ou DirectX soit directement ou à l'aide d'une enveloppe de quelque sorte? Pour DirectX, les choix sont C ++ et C #. Est-ce un niveau plus élevé d'abstraction dire en utilisant le travail de WPF?

Je l'ai utilisé C # parce que je suis familier avec elle et peut tirer parti des nombreuses technologies de traitement des données dans WPF .net et utiliser pour toutes les visualisations nécessaires.

Vous pouvez également donner Nen essayer - Il est gratuit, facile à utiliser et très léger. Il a également surclasse LIBSVM dans un hors-the-box-comparaison sur un grand nombre de régression populaires - et classification. datasets

En général quand je bricoler avec ces types d'algorithmes, je trouve que l'utilisation de l'open source Weka Toolkit était un excellent moyen de prototype et de découvrir tout un tas de différents algorithmes d'apprentissage (pas seulement les réseaux de neurones artificiels). Ces jours-ci, il semble que si elles ont des liaisons à partir d'un tas de langues différentes, donc vous ne devriez pas être lié à Java si vous voulez interagir avec Weka au niveau du code.

Une fois que j'ai trouvé et compris quelque chose qui était cool / faire un très bon travail de classification, je l'ai écrit l'algorithme en C ou en partie C ++ pour le plaisir et en partie pour gagner les gains de vitesse nécessaires pour travailler avec des ensembles de données plus importants.

Utilisez C ++ et si votre réseau de neurones est assez simple de ne pas utiliser des cadres bizarres là-bas.

Il y a peut-être 5 ans, je l'ai fait un solveur Sokoban utilisant l'apprentissage par renforcement. Au moment où nous avons décidé d'aller avec Java et utiliser un Agent Framework développé par une université italienne.

La première décision mauvaise ici était d'utiliser ce cadre. Il y avait essentiellement des bugs ici et là qui nous a fait perdre des charges de temps de débogage du code du cadre.

Une fois que nous sommes arrivés au point où tout est stable, la formation du réseau de neurones était mort lente. Nous l'avons laissé courir la nuit dans une machine assez puissante et encore résolu très peu puzzles. Fondamentalement, l'allocation Java d'objet et la collecte des ordures endommageaient la performance globale du système tout à fait mal. Nous peaufiné un peu l'application en créant des pools d'objets au lieu de les attribuer tout le temps, mais la performance du programme était encore un ordre de grandeur inférieur à une mission similaire qui a été implémenté en C ++ en utilisant les sockets directement.

Hope this helps!

Eh bien, si vous aimez un prototype rapide puis python ou Matlab semble le meilleur. Il y a beaucoup de bibliothèques disponibles pour les réseaux de neurones. Certaines des bibliothèques sont conçus de telle sorte qu'ils vous donnent quantité minimale de peaufinage portée, mais les bibliothèques comme Théano sont extrêmement rapides que la fonction sont en interne compilées dans C (je suppose que le plus rapide jusqu'à ce jour) et il vous donne toutes les fonctionnalités de interne peaufinage. Théano est typique d'utiliser au début, mais est extrêmement puissant. Et plus tard si vous souhaitez passer de neurones à neurones en profondeur alors il n'y a pas beaucoup de différence. Professionnel Kagglers ont aussi tendance à utiliser cette bibliothèque. Cette bibliothèque possède aussi un support GPU. De toutes les bibliothèques que j'ai utilisé je l'ai trouvé Théano être le plus utile et puissant. Une partie de l'autre Etat du cadre de l'art pour l'apprentissage en profondeur comme Caffe sont développés sur Théano.

Hope this helps.

J'ai mis plusieurs prototypes de réseau de neurones en Java et C / C ++. Lorsque les questions de performance, utiliser avec C / C ++.

L'un de mes mise en œuvre (non vectorisé) d'un Multilayer Perceptron de base fait un million d'itérations de formation (avec une configuration de 2 entrées, 4 cachées et 1 noeud de sortie) en moins d'une minute. Ma mise en œuvre presque identique en Java prend un énorme amout de temps pour le faire. Vous pouvez également utiliser une bibliothèque d'algèbre linéaire comme Eigen pour créer une version vectorisée pour améliorer la vitesse de traitement.

Imaginez que vous utilisez le vôtre pour tout type de traitement d'image (reconnaissance des visages, OCR, etc.) avec, par exemple, des images de pixels 28x28. Vous auriez 784 unités d'entrée et au moins autant d'unités cachées. Cela prend une énorme quantité de temps pour former il est donc bénéfique pour sauver de précieuses minutes, heures ou jours.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top