caffe 原始碼 閱讀 指導意見
Caffe Source Code Analysis
https://buptldy.github.io/2016/10/09/2016-10-09-Caffe_Code/
./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt
其中第一個引數build/tools/caffe是Caffe框架的主要框架,由tools/caffe.cpp檔案編譯而來,第二個引數train表示是要訓練網路,第三個引數是 solver的protobuf描述檔案。在Caffe中,網路模型的描述及其求解都是通過 protobuf 定義的,並不需要通過敲程式碼來實現。同時,模型的引數也是通過 protobuf 實現載入和儲存,包括 CPU 與 GPU 之間的無縫切換,都是通過配置來實現的,不需要通過硬編碼的方式實現,有關
protobuf的具體內容可參考這篇博文:
看了文字看的一頭霧水 不會的太多 想哭
Caffe程式碼解析(1-4) xuesong
這個人的講解 跨度性很大 看起來很費勁
https://imbinwang.github.io/research/
這個人貌似很高大上
Caffe原始碼解析之Layer
層的輸入輸出結構,圖示是這樣的,
layer_img
每種型別的layer需要定義三種關鍵操作LayerSetUp, Forward, Backward:
LayerSetUp: 網路構建時初始化層和層的連線
Forward: 網路資料前向傳遞,給定bottom輸入資料,計算輸出到top
Backward: 網路誤差反向傳遞,給定top的梯度,計算bottom的梯度並存儲到bottom blob
實現細節
Caffe中與Layer相關的標頭檔案有7個,
layer.hpp: 父類Layer,定義所有layer的基本介面。
data_layers.hpp: 繼承自父類Layer,定義與輸入資料操作相關的子Layer,例如DataLayer,HDF5DataLayer和ImageDataLayer等。
vision_layers.hpp: 繼承自父類Layer,定義與特徵表達相關的子Layer,例如ConvolutionLayer,PoolingLayer和LRNLayer等。
neuron_layers.hpp: 繼承自父類Layer,定義與非線性變換相關的子Layer,例如ReLULayer,TanHLayer和SigmoidLayer等。
loss_layers.hpp: 繼承自父類Layer,定義與輸出誤差計算相關的子Layer,例如EuclideanLossLayer,SoftmaxWithLossLayer和HingeLossLayer等。
common_layers.hpp: 繼承自父類Layer,定義與中間結果資料變形、逐元素操作相關的子Layer,例如ConcatLayer,InnerProductLayer和SoftmaxLayer等。
layer_factory.hpp: Layer工廠模式類,負責維護現有可用layer和相應layer構造方法的對映表。
來源: https://imbinwang.github.io/research/inside-caffe-code-layer
後面再詳細的看吧,表示看不懂的地方太多了!
https://www.cnblogs.com/louyihang-loves-baiyan/p/5149628.html
Caffe原始碼解析1:Blob
這篇文章的確超讚,適合初學者