2016-04-16 35 views
7

Sono interessato a reti neurali convoluzionali (CNN) come un esempio di computazionalmente vasta applicazione che è adatto per l'accelerazione utilizzando hardware riconfigurabile (cioè diciamo FPGA)Una semplice rete neurale convoluzionale codice

Per farlo ho è necessario esaminare un semplice codice CNN che posso usare per capire come sono implementati, come sono effettuati i calcoli in ogni strato, come l'output di ogni strato viene alimentato all'ingresso del successivo. Ho familiarità con la parte teorica (http://cs231n.github.io/convolutional-networks/)

Ma, non sono interessato alla formazione della CNN, voglio un codice CNN completo e autonomo pre-addestrato e tutti i valori di pesi e bias sono noti.

So che ci sono un sacco di librerie CNN, ad esempio Caffe, ma il problema è che non esiste un codice di esempio banale che sia autonomo. anche per il più semplice esempio di Caffe "cpp_classification" vengono richiamate molte librerie, l'architettura della CNN è espressa come file .prototxt, altri tipi di input come .caffemodel e .binaryproto sono coinvolti. anche le librerie openCV2 sono invocate. ci sono strati e strati di astrazione e diverse librerie che lavorano insieme per produrre l'esito della classificazione.

So che tali astrazioni sono necessarie per generare un'implementazione CNN "utilizzabile", ma per una persona dell'hardware che ha bisogno di un codice bare-bone per studiare, questo è troppo "lavoro non correlato".

La mia domanda è: Qualcuno può guidarmi in una implementazione CNN semplice e autonoma con cui posso iniziare?

risposta

9

Posso consigliare tiny-cnn. È semplice, leggero (ad esempio solo intestazione) e solo CPU, pur fornendo diversi strati frequentemente utilizzati nella letteratura (come ad esempio pooling layer, dropout layer o livello di normalizzazione della risposta locale). Ciò significa che è possibile esplorare facilmente un'implementazione efficiente di questi layer in C++ senza richiedere la conoscenza di CUDA e scavare attraverso l'I/O e il codice framework come richiesto da framework come Caffe. L'implementazione manca di alcuni commenti, ma il codice è ancora facile da leggere e capire.

Il MNIST example fornito è abbastanza facile da usare (provato un po 'di tempo fa) e si allena in modo efficiente. Dopo l'allenamento e il test, i pesi vengono scritti su file. Quindi disponi di un semplice modello pre-addestrato da cui puoi iniziare, vedere lo examples/mnist/test.cpp fornito e lo examples/mnist/train.cpp. Può essere facilmente caricato per testare (o riconoscere cifre) in modo tale da poter eseguire il debug del codice durante l'esecuzione di un modello appreso.

Se si desidera ispezionare una rete più complessa, dare un'occhiata allo Cifar-10 Example.

+0

Grazie! tiny-cnn è in effetti molto più leggibile per un principiante piuttosto che per il caffè ed è un buon punto di partenza. – bromanous

5

Questa è l'implementazione più semplice che ho visto: DNN McCaffrey

Inoltre, il codice sorgente per this by Karpathy sembra piuttosto semplice.

+0

Grazie! i tuoi collegamenti sono molto utili sia per la codifica che per i concetti di apprendimento. – bromanous

Problemi correlati