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

时间:2016-04-16 06:51:49

标签: 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实施,我可以从这开始吗?

2 个答案:

答案 0 :(得分:13)

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

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

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

答案 1 :(得分:6)

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

此外,this by Karpathy的源代码看起来非常简单。