定義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