首页 文章

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

提问于
浏览
10

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

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

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

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

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

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

2 回答

  • 6

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

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

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

  • 13

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

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

相关问题