Domanda

dalla vostra esperienza, quale è l'approccio più efficace per implementare reti neurali artificiali prototipi?È un sacco di hype su R (libero, ma io non lavoro con esso) o Matlab (non gratuito), un'altra possibile scelta è quella di utilizzare un linguaggio come il C++/Java/C#.La domanda è rivolti principalmente persone che hanno provato a testare alcune architetture di reti neurali o algoritmi di apprendimento.

Se la vostra scelta è quella di utilizzare un linguaggio di programmazione diverso dal tre di cui sopra, mi puoi dire i loro nomi e alcune spiegazioni relative a vostra scelta (ad eccezione di:questo è l'unico/lingua più usata conosciuto da me).

Grazie.

È stato utile?

Soluzione

Dal momento che le reti neurali sono molto usati dagli scienziati, e non tanto dai programmatori, scegliere un linguaggio di programmazione che si rivolge a scienziati e fornisce buone biblioteche per le reti neurali.

Python è una scelta ragionevole dal momento che è ampiamente utilizzato dagli scienziati. Due distribuzioni per cominciare sono

http://www.pythonxy.com/

http://code.enthought.com/

Queste distribuzioni Python includono un sacco di moduli aggiuntivi che non sono nella libreria standard di Python, ma che sono molto utili per il tipo di programmazione che gli scienziati fanno. Cercando l'indice dei pacchetti Python esce con un paio di pacchetti di rete neurale che possono essere OK se sono solo imparare sulle reti neurali.

http://pypi.python.org/pypi?:action= ricerca & termine = neurale & submit = cercare

Tuttavia, se si sta facendo un lavoro serio con le reti neurali si vuole qualcosa di simile alla libreria veloce Neural Network. Questo è dotato di binding Python in modo che si può fare la vostra programmazione in Python, utilizzare la vasta gamma di moduli Python per la rappresentazione grafica, la visualizzazione, la manipolazione dei dati e così via. Ma, le reti neurali verrà eseguito utilizzando il codice compilato optmised dalla libreria FANN. Il meglio dei due mondi.

In altre parole, per l'esecuzione del codice di rete neurale vero e proprio, è necessario C, non Java. Dal momento che le librerie C non si integrano molto bene con Java, scegliere una lingua che non si integrano senza problemi con librerie C. Python fa questo ed è anche piuttosto più produttivo di Java in quanto non v'è molto meno linee di codice necessarie per spiegare gli algoritmi. Alcune persone hanno trovato a 10 volte aumento della produttività nel Java.

È menzionato R, forse perché ha funzioni statistiche che si avrebbe bisogno di utilizzare, o forse avete persone disponibili che possono scrivere codice R. Anche in questo caso, la scelta di Python vs R non è un aut-aut decisione. È possibile utilizzare entrambi.

La libreria RPY permette ai programmi Python l'accesso a biblioteche R e il codice. L'utilizzo di questo si dovrebbe scrivere i tuoi programmi principali in Python e trattare R come uno strumento per fornire le librerie, nello stesso modo in cui si fanno uso della biblioteca FANN che è stato scritto in C.

http://rpy.sourceforge.net/

C'è un altro modulo chiamato RSPython che funziona in entrambe le direzioni, in modo che i programmi di R possono accedere alle librerie scritte in Python. Questo sarebbe utile se si dispone di un programmatore esperto R aiutare voi.

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

E non è tutto. È possibile sfruttare Python per semplificare la programmazione Java. Se si dispone di un motore di rete neurale Java, si può ancora scrivere la maggior parte del vostro programma in Python utilizzando la versione Jython che gira su Java VM e consente di utilizzare le librerie e le classi Java nel codice. Ed è ancora possibile utilizzare la libreria veloce FANN pure poiché essi forniscono associazioni per i programmi Java.

Il motivo principale che mi consiglia di Python per il vostro lavoro è che è utilizzato da un sacco di scienziati, che è il motivo per cui ci sono due scienze orientate distribuzioni disponibili. Una seconda ragione è che Python è molto facile per i programmatori alle prime armi per iniziare con, e ad esplorare le reti neurali si sarà probabilmente iniziare con le simulazioni più semplici e lavorare fino a quelle più complesse con più manipolazione e l'analisi dei risultati dei dati. Python vi permetterà di costruire una propria libreria di codice, e diventare un esperto programmatore Python in modo da poter concentrarsi di più della vostra attenzione sui problemi di rete neurale. Se si rimbalzare in giro con un po 'di Java, e un po' di C ++ e un po 'di R, allora si sarà in grado di spendere meno tempo su reti neurali. Questa strategia potrebbe essere buono per Someone che vuole una carriera in programmazione, ma non per chi vuole raggiungere alcuni risultati significativi con le reti neurali.

Anche se il vostro lavoro di rete neurale si estende in hardware specializzato, i cosiddetti chip neuromorfici, è ancora possibile sfruttare Python come questa carta dal NIH dimostra:

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

Altri suggerimenti

Ho provato ad utilizzare entrambe le lingue più alto di astrazione di livello (Matlab, Java) e quelle più basse (C). Sia utilizzando cassette e librerie e codifica io stesso. La risposta globale? Nessuno dei due è lo strumento perfetto. Si prega di tenere presente che:

  • un prototipo potrebbe non essere sufficiente: spesso è necessario eseguire la rete su grandi campioni, o più volte nel corso di un sottoinsieme di campioni (in caso di evoluzione reti neurali) per ottenere risultati decenti. Se si deve eseguire una rete di un milione di volte, anche un piccolo guadagno di prestazioni potrebbe essere di grande aiuto e risparmio di tempo (vale a dire C sopra MATLAB);

  • Se, d'altra parte, è necessario facilità di codifica si potrebbe desiderare di utilizzare una delle tante librerie pre-confezionati (javaNN, ecc);

  • che tipo di rete neurale stai usando? reti a tempo continuo ricorrenti neurali (CTRNN)? Backprop? Come si fa a li alleni? Come si fa a verificare i loro risultati? È importante la precisione? (Vale a dire stai li esegue su un piccolo dispositivo, come ad esempio una scheda di controllo robotico di memoria limitata, come Arduino?)

Se avete tempo da perdere, io suggerirei

  1. apprendere i concetti utilizzando un linguaggio di più alto livello, o anche pseudocodice prima;
  2. una volta che si ha familiarità con tutte le complicazioni, soprattutto se si utilizza reti neurali in evoluzione, scegliere una lingua che hanno già familiarità con
  3. , allora si potrebbe desiderare di avviare la ricerca come ottimizzare per la velocità, ingombro di memoria, ecc.

Spero che questo aiuti.

Ho usato neurale di Matlab networking tool box in una certa misura, e c'è piaciuto come strumento di prototipazione grazie alla sua interfaccia grafica che consente di impostare la rete, sperimentare con i formati di formazione vs dati di input di test, e il suo post formazione test tutto costruito in. Ci sembrava bello e naturale per iniziare con ...

Ho anche sperimentato con Joone (Java Object Oriented Neural Motore). E 'impostato abbastanza bene, e, al tempo ero un po' di un dilettante e ancora avuto problemi nel trovare varie reti installato e funzionante, con i test. E 'Java, quindi non può avere le prestazioni che si potrebbe desiderare, se ci si allena grandi sistemi complessi, ma la sua API era estremamente accessibile.

Ho visto anche un lavoro fatto con Flood in C ++. Ha un sacco di classi costituite con le reti che sono appropriati per risolvere una serie di problemi. E 'la pena di verificare.

Vorrei anche consigliare vivamente pitone. Per un prototipo, pitone è un'ottima scelta: è più facile e più veloce per programmare in, ci sono un numero enorme di librerie disponibili, ed è ampiamente utilizzato nella comunità scientifica.

Inoltre, se si utilizza python, è anche possibile usufruire della eccellente PyBrain pacchetto che contiene algoritmi per le reti neurali, apprendimento per rinforzo, apprendimento non supervisionato, e altre attività di apprendimento automatico, che dovrebbero aiutare a costruire un prototipo in fretta.

Questo dipende dalla configurazione corrente. Quando ho usato per lavorare su di essi di nuovo in tempi del college, ho dovuto usare C ++ + + MPI ricette numerici. Questo è stato fatto perché ho dovuto caricare condivisione sul grande cluster Beowulf.

Se le vostre esigenze di calcolo non sono grandi, nulla farebbe. librerie preconfezionati sono disponibili su tutte le piattaforme (R, Python (NumPy, SciPy), C / C ++ (ricette numerico), ecc). Se siete di programmazione confortevole in una di esse, non dovrebbe essere un grosso problema.

Se dovessi prototipo nulla ora, probabilmente sarei andare con Python (solo perché lo trovo molto più facile per la prototipazione)

Scilab è una fonte alternativa aperta a Matlab.

Si può sperimentare con le reti neurali utilizzando il ANN Toolbox per Scilab .

Focus sulla teoria ed esperimenti. Avete scelto caratteristiche discriminanti per i vostri campioni? Qual è lo stato della vostra formazione e di test set. Per ogni esperimento, studiare la matrice di confusione. Avete un idea del perché è classificato erroneamente un campione? Vi sembra logico per voi? In caso contrario, che dispongono di non utilizzare aiuterebbe?

Implementazione viene dopo, usare il linguaggio si ha familiarità con. Un linguaggio gestito come Java o C # è probabile che sia meno soggetto ad errori: almeno sei meno probabilità di rovinare le cose a causa del puntatore o di allocazione della memoria bug. Ottimizzazione arriva ultimo (dopo un po 'di profilazione decente come sempre).

"Encog è un quadro avanzato neurale di rete e macchina di apprendimento. Encog contiene le classi per la creazione di una vasta gamma di reti, così come classi di supporto per normalizzare e dati di processo per queste reti neurali. Encog allena utilizzando multithread propagazione resiliente. Encog può inoltre usufruire di una GPU ad ulteriori tempi di elaborazione di velocità. un banco di lavoro GUI basata è prevista anche per aiutare il modello e addestrare le reti neurali. Encog è stato in fase di sviluppo attivo dal 2008 ".

Encog è disponibile per Java, C # .Net e Silverlight.

http://www.heatonresearch.com/encog

Nelle mie classi nn a scuola abbiamo usato MATLAB e poi ho usato Java per la mia tesi.

Vorrei suggerire Java o MATLAB. Matlab perché probabilmente già ha molto di ciò che si potrebbe aver bisogno. E Java perché è veloce da implementare ciò che potrebbe mancare in progetti open source. E besided poiché oltre l'attuazione delle reti neurali potrebbe essere necessario qualche modo per visualizzarli. E per questo personalmente ritengo che Java o MATLAB è abbastanza facile.

Mi piace inondazione . È gratis, completo, e scritto in C ++.

Le implementazioni in Matlab sono sofisticato e completo. Ho trovato che sia sufficiente per valutare diversi tipi di reti. È anche molto programmabile tramite interfacce esterne.

Tuttavia, dal momento che le implementazioni degli algoritmi non sono open source, a volte è più difficile quando è necessario spostare un particolare pezzo di codice in un'applicazione al di fuori di Matlab, come codificato la mia mano implementazioni di diversi tipi di reti neurali prodotto diverso risultati.

Ho iniziato a scrivere un'implementazione NN utilizzando C ++ e ha scoperto che non conoscevo abbastanza la matematica coinvolti in principio. Che ha finito per hapenning era che era troppo difficile da refactoring del codice come mi è stato modificando il modello di calcolo.

Alla fine ho dato in MATLAB come è stato sicuramente un compagno migliore per imparare come neurali lavoro reti. Sono stato in grado di fare grandi cambiamenti all'algoritmo con un paio di colpi di chiave e rappresentare graficamente i risultati anche.

Forse la mia esperienza sarebbe stato meglio se avessi usato un quadro matrice di calcolo già costruito. Considerando che è così che si fa 3D ci dovrebbe essere un paio di librerie ottimizzate davvero là fuori per la maggior parte delle lingue. Heck si potrebbe anche sfruttare Direct3D o OpenGL per questo, ma sono sicuro che ci sia qualcosa di più adatto per le reti neurali là fuori.

Credo che non sto fornendo molte informazioni su ciò che si dovrebbe fare. Posso però dire che cosa non si deve fare. - e che sta cercando di scrivere codice matrice di manipolazione da soli

Si potrebbe voler dare Weka uno sguardo . Ha alcuni strumenti integrati per cose come la visualizzazione dei dati, ed è stato in giro per anni ( alcuni screenshot ).

A mio avviso nel lavorare con le reti neurali la chiave è sempre la formazione situato proprio non tanto come la rete stessa è attualizzata nel codice. Vorrei scegliere una lingua in base al tipo di problema che si sta tentando di risolvere utilizzando la rete. Per la rete stessa C ++, C #, Python e Java sono tutti vitali.

Stai usando questo in relazione a un problema che richiede l'elaborazione di immagini? Nel qual caso probabilmente si desidera qualcosa che si aggancia a una libreria di elaborazione delle immagini come OpenCV facilmente. O c'è qualche elaborazione audio coinvolti?

Potrebbe essere necessario visualizzare facilmente la formazione imposta così quanto facile sarebbe questo essere con il linguaggio della scelta? Si può lavorare sia con OpenGL o DirectX librerie direttamente o tramite un involucro di qualche tipo? Per DirectX le scelte sono C ++ e C #. Sarà un più alto livello di astrazione dire usando il lavoro WPF?

Ho usato C #, perché io sono familiarità con essa e può sfruttare le numerose movimentazione tecnologie .NET e WPF utilizzare per eventuali visualizzazioni dei dati necessari.

Si potrebbe anche voler dare Nen una prova - È gratis, facile da usare e molto leggero. E 'anche rel="nofollow"> su molti Regressione popolare - e Classificazione-set di dati.

In genere quando mi è stato armeggiare con questi tipi di algoritmi, ho scoperto che utilizzando il open-source Weka Toolkit è stato un ottimo modo per prototipi e scoprire un sacco di diversi algoritmi di apprendimento (non solo le reti neurali artificiali). In questi giorni, sembra come se hanno attacchi da un gruppo di lingue diverse, in modo da non dovrebbe essere legato a Java se si desidera interagire con Weka a livello di codice.

Una volta che ho trovato e capito qualcosa che era fresca / facendo un buon lavoro di classificazione, ho scritto l'algoritmo in C o C ++ in parte per divertimento e in parte per ottenere i guadagni di velocità necessari richiesti per lavorare con set di dati di grandi dimensioni.

L'uso di C++ e se la vostra rete neurale è abbastanza semplice, non usare strano quadri là fuori.

Forse 5 anni fa ho fatto un Sokoban risolutore utilizzando il Rafforzamento dell'Apprendimento.Al momento abbiamo deciso di andare con Java e l'utilizzo di alcune Agente Framework sviluppato da un'Università italiana.

Prima la cattiva decisione di utilizzare questo Framework.Fondamentalmente, si era bug qua e là, che ci ha causato dei rifiuti carichi di debug in tempo il quadro di codice.

Una volta che abbiamo ottenuto al punto in cui tutto era stabile, la formazione della Rete Neurale era appena morto lento.Lo abbiamo lasciato in esecuzione per una notte in una abbastanza potente macchina e ancora non risolto alcuni enigmi.Fondamentalmente Java oggetto di assegnazione e la raccolta dei rifiuti danneggiare l'intera performance del sistema molto male.Abbiamo modificato un po ' l'app con la creazione di pool di oggetti invece di assegnare loro tutto il tempo, ma le prestazioni del programma era ancora un ordine di grandezza in meno rispetto a un compito simile che è stato implementato in C++ utilizzando direttamente i socket.

Spero che questo aiuta!

Bene, se vi piace prototipazione rapida poi pitone o MATLAB sembra il migliore. Ci sono un sacco di librerie disponibili per le reti neurali. Alcune delle librerie sono progettati in modo tale che ti danno quantità minima di tweaking portata, ma le librerie come Theano sono estremamente veloci, come la funzione vengono compilati internamente C (credo che il più veloce fino a data) e ti dà tutte le funzionalità di interno tweaking. Theano è tipico di utilizzare in un primo momento, ma è estremamente potente. E in seguito, se si desidera spostare da neurale profonda neurale, allora non c'è molta differenza. Professionale Kagglers anche tendono ad usare questa libreria. Questa libreria ha anche il supporto GPU. Di tutte le librerie che ho usato ho trovato Theano per essere il più utile e potente. Alcuni degli altri dello stato del quadro dell'arte per l'apprendimento profondo come Caffe si sviluppano su Theano.

Spero che questo aiuti.

Ho implementato diversi prototipi di rete neurale in Java e C / C ++. Quando la performance, utilizzare con C / C ++.

Un mio implementazione (non vettorializzare) di una base percettrone multistrato fa un milione di iterazioni di formazione (con una configurazione di 2 ingressi, 4 nascosti e 1 nodo di uscita) in meno di un minuto. La mia implementazione quasi identica in Java prende un enorme amout di tempo per farlo. Si potrebbe anche utilizzare una libreria di algebra lineare come Eigen per creare una versione vettorializzare per migliorare la velocità di elaborazione.

Immaginate si usa la vostra per qualsiasi tipo di elaborazione delle immagini (riconoscimento facciale, OCR, etc.) con, ad esempio, le immagini 28x28 pixel. Avreste 784 unità di input e almeno altrettante unità nascoste. Questo richiede una quantità enorme di tempo per allenarsi in modo che sia vantaggioso per risparmiare minuti preziosi, ore o giorni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top