Caffe中用的模型结构是著名的手写体识别模型LeNet-5(http://yann.lecun.com/exdb/lenet/a35.html)。当年美国大多数银行就是用它来识别支票上面的手写数字的。能够达到这种商用的地步,它的准确性可想而知,唯一的区别是把其中的sigmoid激活函数换成了ReLU。
为什么换成ReLU,上一篇blog中找到了一些相关讨论,可以参考。
CNN的发展,关键就在于,通过卷积(convolution http://deeplearning.stanford.edu/wiki/index.php/Feature_extraction_using_convolution)和降采样(pooling http://deeplearning.stanford.edu/wiki/index.php/Pooling )能够成功的减少需要训练的参数值,回头去看SparseAutoEncoder 更会有明显的感觉。
具体需要训练多少个参数,http://blog.youkuaiyun.com/zouxy09/article/details/8781543 有做一个对应的推算,可以参考。
这是一个原始的LeNet模型图
在Caffe中,这个结构进行了一些修改。结构定义在$caffe-master/examples/mnist/lenet_train_test.prototxt中。
需要对google protobuf有一定了解并且看过Caffe中protobuf的定义,其定义在$caffe-master/src/caffe/proto/caffe.proto。
protobuf是google公司的一个开源项目,主要功能是把某种数据结构的信息以某种格式保存及传递,类似微软的XML,但是效率较高。目前提供C++、java和python的API。

本文详细解析了Caffe框架中实现的LeNet模型,该模型在手写数字识别中有广泛应用。讨论了卷积层、池化层以及ReLU激活函数的作用,并介绍了模型结构及其参数计算。此外,还概述了Caffe中模型定义、protobuf的使用以及反向传播的过程。
最低0.47元/天 解锁文章
4518

被折叠的 条评论
为什么被折叠?



