Un simple réseau de neurones à Convolution code

je suis intéressé par des réseaux de neurones à convolution (CNNs) comme un exemple de calcul à grande échelle qui est approprié pour l'accélération à l'aide de matériel reconfigurable (c'est à dire permet de dire FPGA)

pour ce faire, je dois examiner un code CNN simple que je peux utiliser pour comprendre comment ils sont mis en œuvre, comment sont les calculs dans chaque couche qui a lieu, comment la sortie de chaque couche est alimentée à l'entrée de la suivante. Je suis familier avec la partie théorique (http://cs231n.github.io/convolutional-networks/)

mais, je ne suis pas intéressé par la formation de la CNN, je veux un code complet, autonome CNN qui est pré-formé et tous les poids et les valeurs de biais sont connus.

je sais qu'il y a beaucoup de bibliothèques CNN, c.-à-d. Caffe, mais le problème est qu'il n'y a pas de code d'exemple trivial qui est autonome. même pour L'exemple de Caffe le plus simple "cpp_classification" de nombreuses bibliothèques sont invoquées, le l'architecture de la CNN est exprimée en.fichier prototxt, d'autres types d'entrées telles que .caffemodel et .binaryproto sont impliqués. les bibliothèques openCV2 sont également invoquées. il y a des couches et des couches d'abstraction et différentes bibliothèques qui travaillent ensemble pour produire le résultat de la classification.

je sais que ces abstractions sont nécessaires pour générer une implémentation CNN "utilisable", mais pour un hardware qui a besoin d'un code bare pour étudier, c'est trop de "non-relié" travail."

ma question Est la suivante: est-ce que quelqu'un peut me guider dans une implémentation simple et autonome de CNN avec laquelle je peux commencer?

10
demandé sur bromanous 2016-04-16 09:51:49

2 réponses

je peux recommander minuscule-cnn. Il est simple, léger (par exemple header-only) et CPU seulement, tout en fournissant plusieurs couches fréquemment utilisées dans la littérature (comme par exemple pooling layers, dropout layers ou local response normalization layer). Cela signifie que vous pouvez facilement explorer une implémentation efficace de ces couches en C++ sans avoir besoin de connaître CUDA et creuser à travers l'E/S et le code framework comme requis par framework tel que Caffe. La mise en œuvre manque de commentaires, mais le code est encore facile à lire et à comprendre.

La condition MNIST example est assez facile à utiliser (je l'ai essayé moi-même il y a quelques temps) et s'entraîne efficacement. Après la formation et les essais, les poids sont écrits en fichier. Ensuite, vous avez un modèle simple pré-formé à partir de laquelle vous pouvez commencer, voir le exemples/mnist/test.rpc et exemples / mnist / train.rpc. Il peut facilement être chargé pour les tests (ou en reconnaissant des chiffres) de sorte que vous pouvez déboguer le code tout en exécutant un modèle appris.

si vous voulez inspecter un réseau plus compliqué, regardez le Icra-10 Exemple.

11
répondu David Stutz 2016-04-16 11:26:30

C'est l'implémentation la plus simple que j'ai vu: DNN McCaffrey

aussi, le code source pour ce par Karpathy