Caffe重视模块化设计,因为神经网络本质上是有相互连接的网络层构成,网络处理的数据块可以在网络层间前向和反向传递。接下来看看Caffe中的4大模块:
- Blob: 是Caffe的数据表示,隐藏了CPU/GPU存储申请和同步的细节(此功能由SyncedMemory实现),用来存储网络层间传递的数据以及学习到的网络参数。
- Layer: 是网络的基本结构单元,负责完成Blob中存储数据的前向和反向传递。
- Net: 是Caffe的神经网络表示,负责将网络中的各个Layers串联起来,构成有向无环图。
- Solver: 是Caffe神经网络优化的求解器,监控网络参数的更新,前向后向数据生成,协调神经网络的训练和测试,比如使用什么梯度下降算法以及具体参数设置,同时负责保存和恢复训练状态以及存储网络参数。
这4个模块的层次和复杂性从低到高,贯穿整个Caffe框架。刚开始阅读Caffe源码时,我觉得按照这个bottom-up的顺序比较好。