定义CAFFE为caffe跟目录,caffe的核心代码都在$CAFFE/src/caffe 下,主要有如下部分:net, blob, layer, solver.网络
net.cpp:
net定义网络, 整个网络中含有不少layers, net.cpp负责计算整个网络在训练中的forward, backward过程, 即计算forward/backward 时各layer的gradient。
函数
layers:
在$CAFFE/src/caffe/layers中的层,在protobuffer (.proto文件中定义message类型,.prototxt或.binaryproto文件中定义message的值) 中调用时包含属性name, type(data/conv/pool…), connection structure (input blobs and output blobs),layer-specific parameters(如conv层的kernel大小)。定义一个layer须要定义其setup, forward 和backward过程。
spa
blob.cpp:
net中的数据和求导结果经过4维的blob传递。一个layer有不少blobs, e.g,ci
slover.cpp:
结合loss,用gradient更新weights。主要函数:
Init(),
Solve(),
ComputeUpdateValue(),
Snapshot(), Restore(),//快照(拷贝)与恢复 网络state
Test();
在solver.cpp中有3中solver,即3个类:AdaGradSolver, SGDSolver和NesterovSolver可供选择。
关于loss,能够同时有多个loss,能够加regularization(L1/L2);input