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.csdn.net/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,但是效率较