一个简单的卷积神经网络代码

bro*_*ous 11 deep-learning caffe

我对卷积神经网络(CNN)感兴趣,作为适用于使用可重新配置硬件加速的计算广泛应用的一个例子(也就是说FPGA)

为了做到这一点,我需要分析一个简单的CNN代码,我可以用它来了解它们是如何实现的,如何在每一层的发生,如何各层的输出被馈送到下一个的输入端的计算.我熟悉理论部分(http://cs231n.github.io/convolutional-networks/)

但是,我对训练CNN不感兴趣,我想要一个完整的,自包含的CNN代码,这是经过预先训练的,并且所有的权重和偏差值都是已知的.

我知道有很多CNN库,即Caffe,但问题是没有自包含的简单示例代码.即使对于最简单的Caffe示例"cpp_classification",也会调用许多库,CNN的体系结构表示为.prototxt文件,其他类型的输入如.caffemodel和.binaryproto.也调用openCV2库.有抽象层和层,不同的库一起工作以产生分类结果.

我知道需要那些抽象来生成一个"可用的"CNN实现,但对于需要学习裸机代码的硬件人来说,这太过于"无关紧要的工作".

我的问题是:任何人都可以引导我进入一个简单且独立的CNN实现,我可以从这开始吗?

Dav*_*utz 14

我可以推荐tiny-cnn.它简单,轻量(例如仅限标题)和仅CPU,同时提供文献中经常使用的多个层(例如汇集层,丢失层或局部响应规范化层).这意味着,您可以轻松地在C++中探索这些层的有效实现,而无需了解CUDA并根据Caffe等框架的要求挖掘I/O和框架代码.实现缺少一些注释,但代码仍然易于阅读和理解.

提供的MNIST示例非常易于使用(不久前自己尝试过)并且有效地训练.在训练和测试之后,权重被写入文件.然后你有一个简单的预训练模型,你可以从中开始,参见提供的例子/ mnist/test.cppexamples/mnist/train.cpp.可以轻松加载它以进行测试(或识别数字),以便您可以在执行学习模型时调试代码.

如果您想检查更复杂的网络,请查看Cifar-10示例.


cga*_*ner 6

这是我见过的最简单的实现:DNN McCaffrey

此外,Karpathy的源代码看起来非常简单.