明代思想家王阳明提出了“知行合一”,谓认识事物的道理与在现实中运用此道理,是密不可分的一回事。我以为这样的中国哲学话语,对于学习者来说,极具启发意义,要细细体会。中华文明源远流长,很多做人做事的道理,孕育其中,需用心体会,并学以致用。
以“知”促“行”、以“行”促“知”、知行合一。——The unity of Inner knowledge and action.
在chapter 3 中提供了一个很好的实践样例,这个样例在windows下运行了Caffe源代码的MNIST Demo。本章将以该实践为基础来深入理解LeNet网络模型。
1. 初见LeNet原始模型
Fig.1. Architecture of original LeNet-5.
图片来源: Lecun, et al., Gradient-based learning applied to document recognition, P IEEE, vol. 86, no. 11, 1998, pp. 2278-2324.
在这篇图片的论文中,详细描述了LeNet-5的结构。
这里不对LeNet-5原始模型进行讨论。可以参考这些资料:
http://blog.csdn.net/qiaofangjie/article/details/16826849
http://blog.csdn.net/xuanyuansen/article/details/41800721
2. Caffe LeNet的网络结构
他山之石,可以攻玉。本来是准备画出Caffe LeNet的图的,但发现已经有人做了,并且画的很好,就直接拿过来辅助理解了。
第3部分图片来源:http://www.2cto.com/kf/201606/518254.html
先从整体上感知Caffe LeNet的拓扑图,由于Caffe中定义网络的结构采用的是bottom&top这种上下结构,所以这里的图也采用这种方式展现出来,更加方便理解。
Fig.2. Architecture of caffe LeNet.
From bottom to top: Data Layer, conv1, pool1, conv2, pool2, ip1, relu1, ip2, [accuracy]loss.
本节接下来将按照这个顺序依次理解Caffe LeNet的网络结构。
3. 逐层理解Caffe LeNet
本节将采用定义与图解想结合的方式逐层理解Caffe LeNet的结构。
3.1 Data Layer
Fig.3. Architecture of data layer.
Fig.3 是train情况下,数据层读取lmdb数据,每次读取64条数据,即N=64。
Caffe中采用4D表示,N*C*H*W(Num*Channels*Height*Width)。
3.2 Conv1 Layer
Fig.4. Architecture of conv1 layer.
conv1的数据变化的情况:batch_size*1*28*28->batch_size*20*24*24
3.3 Pool1 Layer
Fig.5. Architecture of pool1 layer.
池化层1过程数据变化:batch_size*20*24*24->batch_size*20*12*12
3.4 Conv2 Layer
conv2层的图与Fig.4 类似,卷积层2过程数据变化:batch_size*20*12*12->batch_size*50*8*8。
3.5 Pool2 Layer
pool2层图与Fig.5类似,池化层2过程数据变化:batch_size*50*8*8->batch_size*50*4*4。
3.6 Ip1 Layer
Fig.6. Architecture of ip11 layer.
ip1过程数据变化:batch_size*50*4*4->batch_size*500*1*1。
此处的全连接是将C*H*W转换成1D feature vector,即800->500.
3.7 Relu1 Layer
ReLU1层过程数据变化:batch_size*500*1*1->batch_size*500*1*1
3.8 Ip2 Layer
ip2过程数据变化:batch_size*500*1*1->batch_size*10*1*1
3.9 Loss Layer
Fig.8. Architecture of loss layer.
损失层过程数据变化:batch_size*10*1*1->batch_size*10*1*1
note:注意到caffe LeNet中有一个accuracy layer的定义,这是输出测试结果的层。