Frage

aus Ihrer Erfahrung, die der effektivste Ansatz ist es, künstliche neuronale Netze Prototypen zu implementieren? Es gibt eine Menge Hype um R (frei, aber ich habe nicht mit ihm arbeiten) oder Matlab (nicht kostenlos), eine weitere mögliche Wahl ist eine Sprache wie C ++ / Java / C # zu verwenden. Die Frage zielt in erster Linie die Menschen, die einige neuronale Netze Architekturen oder Lernalgorithmen zu testen versucht.

Wenn Sie Ihre Wahl einer Programmiersprache unterscheidet sich von den drei oben genannten zu verwenden ist, können Sie mir ihre Namen sagen und einige Erläuterungen zu Ihrer Wahl (ausgenommen: dies ist die einzige / am häufigsten verwendete Sprache von mir bekannt).

Danke.

War es hilfreich?

Lösung

Da neuronale Netze eine Menge von Wissenschaftlern verwendet werden, und nicht so sehr von den Programmierern, wählen Sie eine Programmiersprache, die Wissenschaftler richtet und bietet gute Bibliotheken für neuronale Netze.

Python ist eine vernünftige Wahl, da es weit von den Wissenschaftlern verwendet wird. Zwei Verteilungen zu beginnen sind

http://www.pythonxy.com/

http://code.enthought.com/

Diese Python-Distributionen enthalten eine Menge von Add-on-Module, die nicht in der Standard-Python-Bibliothek ist, aber die sind sehr nützlich für die Art der Programmierung, dass die Wissenschaftler tun. Suche im Python-Package-Index mit einigen neuronalen Netzwerk-Paketen kommt, die in Ordnung sein können, wenn Sie nur über neuronale Netze lernen.

http://pypi.python.org/pypi?:action= Suche & term = neuralen & submit = Suche

Wenn Sie jedoch ernsthafte Arbeit mit Neural Networks tun werden Sie so etwas wie die Fast-Neural Network Library möchten. Dies kommt mit Python-Bindungen, so dass Sie Ihre Programmierung in Python zu tun, verwenden Sie die große Vielfalt von Python-Modulen für die grafische Darstellung, Visualisierung, Datenmanipulation und so weiter. Aber Ihre neuronale Netze laufen aus dem FANN Bibliothek optmised kompilierten Code. Das Beste aus beiden Welten.

Mit anderen Worten, für den tatsächlichen neuronale Netzwerk-Code ausgeführt wird, müssen Sie C, nicht Java. Da C-Bibliotheken integrieren nicht so gut mit Java, wählen Sie eine Sprache, die reibungslos mit C-Bibliotheken nicht integrieren. Python tut, und ist auch ziemlich produktiver als Java, da es viel weniger Zeilen Code benötigt, um Ihre Algorithmen zu erklären. Einige Leute haben herausgefunden, eine 10 mal in der Produktivität über Java erhöhen.

Sie haben erwähnt, R, vielleicht, weil es statistische Funktionen, die Sie verwenden müssten, oder vielleicht haben Sie Menschen zur Verfügung, die R-Code schreiben können. Auch hier ist eine Entweder-oder Entscheidung nicht Python im Vergleich zu R wählen. Sie können beide verwenden.

Die RPY Bibliothek ermöglicht Programme Python zu R-Bibliotheken und Code zuzugreifen. Mit diesem würden Sie Ihre wichtigsten Programme in Python schreiben und behandeln R als Werkzeugbibliotheken in gleicher Weise zur Verfügung zu stellen, die Sie nutzen die FANN Bibliothek machen, die in C geschrieben wurde.

http://rpy.sourceforge.net/

Es gibt ein anderes Modul namens RSPython, das funktioniert in beide Richtungen, so dass R Programme Bibliotheken in Python geschrieben zugreifen können. Dies wäre nützlich, wenn Sie ein Experte R Programmierer haben Ihnen helfen.

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

Und das ist nicht alles. Sie können Python nutzen Java-Programmierung zu vereinfachen. Wenn Sie eine Java neuronalen Netzwerk-Engine haben, können Sie immer noch die meisten Ihres Programm in Python schreiben die Jython-Version verwenden, die auf der Java VM läuft und ermöglicht es Ihnen, alle Java-Bibliotheken und Klassen in Ihrem Code zu verwenden. Und Sie können nach wie vor auch die schnelle FANN Bibliothek verwenden, da sie Bindings für Java-Programme bieten.

Der Hauptgrund dafür, dass ich Python für Ihre Arbeit empfehlen ist, dass es durch eine ganze Menge von Wissenschaftlern verwendet wird, weshalb es zwei Wissenschaft orientierte Distributionen zur Verfügung. Ein zweiter Grund ist, dass Python ist sehr einfach für Anfänger Programmierer, mit zu beginnen, und neuronale Netzen in der Erforschung werden Sie wahrscheinlich mit einfachen Simulationen und arbeiten bis zu komplexeren mit mehr Datenmanipulation und Analyse der Ergebnisse beginnen. Python ermöglicht es Ihnen, Ihre eigene Bibliothek von Code aufzubauen, und werden ein Programmierer Experte Python, so dass Sie mehr von Ihrer Aufmerksamkeit auf die neuronalen Netzwerkprobleme konzentrieren können. Wenn Sie mit einem wenig Java prallen herum, und ein wenig C ++ und ein wenig R, dann werden Sie in der Lage sein, weniger Zeit auf neuronalen Netze zu verbringen. Diese Strategie könnte für Someo gut seinne, die eine Karriere in der Programmierung will, aber nicht für jemanden, der einige signifikante Ergebnisse mit neuronalen Netzen erreichen will.

Auch wenn Ihre neuronales Netzwerk Arbeit erstreckt sich in spezialisierte Hardware, sogenannte neuromorphe Chips, können Sie noch Python nutzen, da dieses Papier aus dem NIH zeigt:

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

Andere Tipps

Ich habe versucht, sowohl mit höherer Abstraktionsebene Sprachen (Matlab, Java) und niedere (C). Sowohl mit Werkzeugkästen und Bibliotheken und sie selbst Codierung. Das Gesamt-Ansprechrate? Weder ist das perfekte Werkzeug. Bitte beachten Sie, dass:

  • ein Prototyp möglicherweise nicht genug sein: oft müssen Sie das Netzwerk über große Proben oder mehrmals über eine Teilmenge von Proben (bei der sich entwickelnden neuronalen Netzen) zu erhalten anständige Ergebnisse laufen. Wenn Sie ein Netzwerk eine Million Mal laufen zu lassen, auch eine kleine Leistungssteigerung könnte eine große Hilfe und Zeit sparen (das heißt C über Matlab);

  • , wenn auf der anderen Seite, müssen Sie eine einfache Codierung Sie eines der vielen abgepackten Bibliotheken (javaNN, etc.) verwenden möchte;

  • , welche Art von neuronalen Netzwerk verwenden Sie? zeitkontinuierliche wiederkehrende neuronale Netze (CTRNN)? Backprop? Wie Sie sie trainieren? Wie überprüfen Sie ihre Ergebnisse? Ist Genauigkeit wichtig? (Das heißt Sie sind sie auf einem kleinen Gerät, wie beispielsweise ein Speicher begrenzte Robotersteuerkarte ausgeführt wird, wie Arduinos?)

Wenn Sie Zeit haben zu ersparen, würde ich vorschlagen,

  1. lernen die Konzepte einer höheren Programmiersprache, oder sogar Pseudo-Code zuerst;
  2. , wenn Sie mit allen Feinheiten vertraut sind, vor allem, wenn sich entwickelnden neuronalen Netze verwenden, wählen Sie eine Sprache, die sie bereits vertraut sind mit
  3. dann möchten Sie vielleicht beginnen die Erforschung, wie für die Geschwindigkeit, Speicherbedarf usw. zu optimieren.

Hope, das hilft.

Ich habe Matlab Neural Networking-Tool-Box zu einem gewissen Grad, und es habe sie als Prototyping-Tool aufgrund seiner grafischen Oberfläche verwendet, damit Sie das Netzwerk, experimentieren Sie mit Größen von Training vs Testeingangsdaten einzurichten, und seine post- Ausbildung Prüfung aller in gebaut. Es schien nur schön und natürlich zu beginnen mit ...

Ich experimentierte auch mit Joone (Java Object Oriented Neural Motor). Es ist ganz schön eingerichtet, und zu der Zeit war ich ein bisschen eines Amateur und hatte noch keine Probleme verschiedene Netzwerke zum Laufen, mit dem Testen. Es ist Java, so kann es nicht die Leistung hat, die Sie vielleicht, wenn Sie große komplexe Systeme trainieren, aber seine API war sehr zugänglich.

Ich habe auch etwas arbeiten mit rel="noreferrer"> Flood in C ++. Es hat eine Reihe von Klassen mit Netzwerken einzurichten, die geeignet sind, eine Reihe von Problemen zu lösen. Es ist ein Besuch wert.

Dies hängt von Ihrem aktuellen Setup. Als ich noch an ihnen zu arbeiten wieder in College-Tagen, hatte ich C ++ + MPI + numerische Rezepte zu verwenden. Dies geschieht, weil ich Anteil an großen Beowulf Cluster zu laden hatte.

Wenn Ihre Berechnung braucht nicht groß ist, würde alles tun. Vorverpackten Bibliotheken sind auf allen Plattformen (R, Python (numpy, scipy), C / C ++ (Numerische Rezepte) usw.). Wenn Sie komfortable Programmierung in einer von ihnen sind, sollte es kein großes Problem sein.

Wenn ich jetzt etwas zum Prototyp habe ich wahrscheinlich mit Python gehen würde (nur weil ich es viel einfacher für das Prototyping finden)

Scilab ist eine Open-Source-Alternative zu Matlab.

Sie experimentieren können mit neuronalen Netzen unter Verwendung der ANN Toolbox für Scilab .

Fokus auf die Theorie und Experimente. Haben Sie Diskriminante Funktionen für Ihre Proben? Was ist der Zustand Ihrer Trainings- und Testsätze. Für jedes Experiment untersucht die Konfusionsmatrix. Haben Sie eine Idee, warum eine Probe falsch klassifiziert wird? Scheint es Ihnen logisch? Wenn nicht, die Funktion, die Sie nicht helfen würde verwenden?

Implementierung als nächstes kommt, verwenden Sie die Sprache, die Sie mit vertraut sind. Eine verwaltete Sprache wie Java oder C # ist wahrscheinlich weniger fehleranfällig sein: zumindest sind Sie weniger wahrscheinlich, dass die Dinge vermasseln wegen Zeiger oder Speicherzuweisung Fehler. Optimizing kommt zuletzt (nach ein paar anständige Profilierung wie immer).

"Encog ist eine fortgeschrittene neurale Netzwerk und maschinelles Lernen Rahmen. Encog Klassen enthält eine Vielzahl von Netzwerken, sowie Unterstützungsklassen erstellen zu normalisieren und Prozessdaten für diese neuronale Netze. Encog trainiert multithreaded elastischen Ausbreitungs verwenden. Encog kann auch die Verwendung einer GPU zu weiterer Geschwindigkeitsbearbeitungszeit machen. eine GUI-basierte Workbench auch neuronale Netze zur Verfügung gestellt Modell zu helfen und zu trainieren. Encog ist seit 2008 in der aktiven Entwicklung. "

Encog verfügbar für Java, C # .NET und Silverlight.

http://www.heatonresearch.com/encog

In meiner nn Klasse in der Schule wir Matlab verwendet und dann habe ich Java für meine Diplomarbeit.

Ich würde Java oder Matlab vorschlagen. Matlab, weil es wahrscheinlich schon hat eine Menge, was Sie benötigen. Und java, weil es schnell zu implementieren, was in Open-Source-Projekten könnte fehlen. Und besided da neben der neuronalen Netze Implementierung Sie könnten eine Möglichkeit brauchen, um sie sichtbar zu machen. Und dass ich persönlich glaube, dass Java oder Matlab ganz einfach ist.

Ich mag Flut . Es ist kostenlos, umfassend und in C ++ geschrieben.

Die Implementierungen in Matlab sind anspruchsvoll und vollständig sind. Ich habe es für die Bewertung verschiedener Arten von Netzwerken ausreichend erwiesen. Es ist auch sehr programmierbare externe Schnittstellen.

Da jedoch die Implementierungen der Algorithmen nicht Open Source sind, ist es manchmal schwierig, wenn man außerhalb von Matlab ein bestimmtes Stück Code in einer Anwendung verschieben müssen, wie meine Hand Implementierungen von verschiedenen neuronalen Netzwerktypen codiert erzeugt unterschiedliche Ergebnisse.

Ich habe begonnen, fand eine NN Implementierung Schreiben mit C ++ und dass ich nicht genug über die beteiligte Mathematik am Anfang nicht kannte. Was schließlich hapenning war, dass es zu schwierig war, den Code zu Refactoring, als ich das Berechnungsmodell wurde zwicken.

Schließlich gab ich in MATLAB, wie es zu lernen, wie neuronale Netzen Arbeit auf jeden Fall ein besserer Begleiter war. Ich war in der Lage große Veränderungen an den Algorithmus machen ein paar Tasteneinga- und auch die Ergebnisse grafisch darzustellen.

Vielleicht ist meine Erfahrung wäre besser gewesen, wenn ich eine bereits eingebaute Matrixberechnung Framework verwendet hatte. das ist zu überlegen, wie Sie 3D sollte es für die meisten Sprachen gibt ein paar wirklich optimierte Bibliotheken sein. Heck Sie könnte genauso gut für die Direct3D oder OpenGL nutzen, aber ich bin sicher, dass es etwas besser geeignet für Neuronale Netze da draußen ist.

Ich glaube, ich nicht viele Informationen bin Bereitstellung auf dem, was Sie tun sollen. Ich kann aber sagen, was Sie nicht tun sollten -. Und versucht, sich Matrizenmanipulation Code schreiben

Vielleicht möchten Sie geben Weka einen Blick . Es hat einige integrierten Tools für Dinge wie Datenvisualisierung, und es ist um jetzt schon seit Jahren ( ein paar Screenshots ).

Aus meiner Sicht mit neuronalen Netzen in der Arbeit der Schlüssel ist die Ausbildung immer gesetzt Recht nicht so sehr, wie das Netzwerk selbst in Code aktualisiert wird. Ich würde eine Sprache basierend auf der Art des Problems wählen Sie versuchen, das Netzwerk zu lösen verwenden. Für das Netzwerk selbst C, C #, Python und Java sind alle lebensfähig ++.

Sind Sie mit diesem in Verbindung mit einem Problem erfordert Bildverarbeitung? In diesem Fall werden Sie wahrscheinlich wollen etwas, das leicht zu einer Bildverarbeitungs-Bibliothek wie OpenCV Haken nach oben. Oder gibt es eine Audio-Verarbeitung beteiligt?

Sie müssen möglicherweise leicht das Training visualisieren setzt so, wie einfach das mit der Sprache der Wahl sein würde? Können Sie mit OpenGL oder DirectX-Bibliotheken entweder direkt oder über einen Wrapper irgendeiner Art arbeiten? Für DirectX sind die Entscheidungen C ++ und C #. Wird eine höhere Abstraktionsebene sagt WPF Arbeit mit?

Ich habe C # verwendet, weil ich mit ihm vertraut bin und können ihre zahlreichen Daten nutzen Technologien in .net und verwenden wpf für alle Visualisierungen benötigt Handhabung.

Sie möchten vielleicht auch Nen einen Versuch - Es ist kostenlos, einfach zu bedienen und sehr leicht. Es ist auch trifft LIBSVM in einer Out-of-the-box-Vergleich auf vielen populären Regression - und Klassifizierungsdatensammlungen.

Normalerweise, wenn ich mit dieser Art von Algorithmen wurde gebastelt, fand ich, dass die Open-Source mit Weka Toolkit eine gute Möglichkeit war bis zum Prototyp und eine ganze Reihe von verschiedenen Lernalgorithmen (nicht nur künstliche neuronale Netze) zu entdecken. In diesen Tagen, es sieht aus, als ob sie Bindungen haben aus einer Reihe von verschiedenen Sprachen, so sollten Sie nicht auf Java gebunden werden, wenn Sie auf Codeebene mit Weka interagieren möchten.

Nachdem ich gefunden und verstand etwas, das war cool / einen ziemlich gute Klassifizierung Job, schrieb ich den Algorithmus in C oder C ++ zum Teil zum Spaß und zum Teil der notwendigen Geschwindigkeitsgewinne gewinnen erforderlich, um mit größeren Datensatz zu arbeiten.

Verwenden von C ++ und wenn Ihr neuronales Netzwerk einfach genug ist, verwenden Sie nicht seltsam Frameworks da draußen.

Vielleicht vor 5 Jahren habe ich einen Sokoban-Löser mit Reinforcement Learning. Zu der Zeit haben wir beschlossen, mit Java zu gehen und Agenten-Frameworks von einer italienischen Universität entwickelt verwenden.

Erste schlechte Entscheidung hier war diesen Framework. Es hatte im Grunde Bugs hier und da, die uns verursacht viel Zeit zu verschwenden, den Code des Rahmen Debuggen.

Sobald wir an dem Punkt, wo alles stabil war, trainiert das neuronale Netz war einfach tot langsam. Wir ließen es über Nacht in einer ziemlich mächtigen Maschine läuft und es immer noch gelöst sehr wenige Rätsel. Grundsätzlich Java Objektzuordnung und Garbage Collection schädigen die gesamte Leistung des Systems ziemlich schlecht. Wir gezwickt ein bisschen die App von Pools von Objekten statt Zuteilung sie die ganze Zeit, aber das Programm die Leistung war immer noch eine Größenordnung kleiner als eine ähnliche Zuordnung zu schaffen, die in C implementiert wurde ++ Buchsen direkt verwenden.

Hope, das hilft!

Nun, wenn Sie möchten schnell zum Prototyp dann Python oder Matlab scheint die beste. Es gibt eine Menge von Bibliotheken zur Verfügung für neuronale Netze. Einige der Bibliotheken sind so konzipiert, dass sie Ihnen eine minimale Menge an Tweaking Umfang aber Bibliotheken wie Theano sind extrem schnell, wie die Funktion intern in C kompiliert (ich denke, die schnellste bis heute), und es gibt Ihnen die volle Funktionalität der internen Zwicken. Theano ist typisch auf den ersten Einsatz aber ist extrem leistungsfähig. Und später, wenn Sie von neuralen zu tief neuralen bewegen wollen, dann gibt es einen Unterschied nicht viel. Professionelle Kagglers neigen auch dazu, diese Bibliothek zu verwenden. Diese Bibliothek hat auch GPU-Unterstützung. Von allen Bibliotheken i verwendet haben festgestellt, i Theano die nützlichsten und leistungsfähig zu sein. Einige der anderen Stand der Technik Rahmen für vertieftes Lernen wie Caffe auf Theanos entwickelt.

Hope, das hilft.

Ich habe mehr neuronale Netzwerk Prototypen in Java und C / C ++ implementiert. Wenn Leistung zählt, verwenden Sie mit C / C ++.

Eine meiner Implementierung (nicht vektorisiert) ein Grund Mehrschichtiges Perzeptron hat eine Million Ausbildung Iterationen (mit einem Aufbau von 2-Eingang, 4 unsichtbaren und 1 Ausgangsknoten) in weniger als eine Minute. Meine fast identische Implementierung in Java nimmt einen riesigen amout der Zeit, dies zu tun. Sie könnten auch eine lineare Algebra-Bibliothek wie Eigen verwenden, um eine vektorisierte Version zu erstellen, die Verarbeitungsgeschwindigkeit zu verbessern.

Stellen Sie sich Ihr für jede Art von Bildverarbeitung (Face Recognition, OCR, etc.) mit zum Beispiel 28x28 Pixelbilder verwenden würden. Sie würden 784 Eingabeeinheiten und mindestens so viele versteckte Einheiten. Dies nimmt viel Zeit zu trainieren, so ist es von Vorteil, kostbare Minuten, Stunden oder Tage zu speichern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top