DeepLearning(基於caffe)實戰項目(7)--從caffe結構裏函數總結一覽caffe

        我覺得學習caffe,必須得做到會修改源碼,剛開始可以不需要知道所有的函數是如何實現的,但必須得知道里邊都有哪些函數,這些函數都可以幹什麼

        用網上流行的比喻:Blobs,Layers,Nets的關係就好比,Blob是磚塊,Layer是牆,net是一棟大樓。

Blob:

        Blob是一個模板類,在內存中表示4維數組,維度從低到高爲:width、height、channels(顏色通道)、num(第幾幀)

        函數總結:

  • Reshape:變形函數,根據輸入參數重新設置當前Blob形狀
  • cpu_data:只讀獲取cpu data的指針
  • set_cpu_data:修改cpu data的指針
  • gpu_data:只讀獲得gpu data的指針
  • cpu_diff:只讀獲得cpu diff的指針
  • gpu_diff:只讀獲得gpu diff的指針
  • mutable_cpu_data:讀寫訪問cpu data的指針
  • mutable_gpu_data:讀寫訪問gpu data的指針
  • mutable_cpu_diff:讀寫訪問cpu diff的指針
  • mutable_gpu_diff:讀寫訪問gpu diff的指針
  • ShareData:共享data指針
  • ShareDiff:共享diff指針
  • Update:網絡參數Blob的更新
  • asum_data:計算data的L1範數
  • sumsq_data:計算data的L2範數
  • scale_data:對data進行幅度縮放
  • CopyFrom:從另一個Blob對象拷貝data
  • FromProto:從BlobProto中加載一個Blob
  • ToProto:將Blob中的data導出到BlobProto結構體

Layer:

        Layer至少有一個輸入Blob和一個輸出Blob,部分Layer帶有權值和偏置項,有兩個運算方向:前向傳播、後向傳播

        值得注意的是:大部分函數沒有在Layer.cpp中實現,只有虛函數,真正實現的都在派生類中,具體看各個cpp

        函數總結:

  • Reshape:變形函數,修改Top Blob以及內部Blob緩衝區的形狀
  • Forward:前向傳播函數,給定Bottom Blob,計算Top Blob和Loss,返回值爲當前層loss
  • Backward:反向傳播函數,給定Top Blob誤差梯度,就按Bottom Blob誤差梯度
  • ToProto:將Layer初始化參數寫入ProtoBuffer緩衝區中
  • loss:返回某個Top Blob相關的標量loss值
  • CheckBlobCounts:校驗輸入/輸出BLob數目是否滿足Layer要求
  • SetLossWeights:該函數在layer中SetUp函數中被調用,主要目的是初始化與Top Blob相關的loss權重,放到Top Blob的diff域中,實際由Forward()計算loss

        在layer中的Forward和Backward是前向傳播函數和後向傳播函數包裝,不需要修改這兩個函數,使用的時候只需要在派生類改寫Forward_cpu、Forward_gpu、Backward_cpu、Backward_gpu

Net:

        Net在caffe中代表一個完整的CNN模型,它包括若干Layer實例

        函數總結:

  • ForwardPrefilled:運行前向傳播,輸入Blob已經預先填充
  • ForwardFromTo:前向傳播的其中一種形式,還包括其他兩種形式
  • Forward:前向傳播,指定輸入Blob進行前向傳播
  • ClearParamDiffs:清零所有權值的diff域,應在反向傳播之前運行
  • Backward:反向傳播,無需指定輸入/輸出Blob,因爲前向傳播的時候已經建立聯繫
  • ForwardBackward:前向傳播+後向傳播,輸入爲Bottom Blob,輸出爲loss
  • Update:根據已經(solver)準備好的diff值更新網絡權值
  • ToProto:序列化一個Net到ProtoBuffer
  • ToHDF5:序列化一個Net到HDF5
  • num_inputs:返回輸入Blob數目
  • num_output:返回輸出Blob數目
  • FilterNet:過濾掉用戶指定的在某個階段、級別、狀態下不應該包含的Layer
  • AppendTop:爲網絡追加一個Top Blob
  • AppendBottom:爲網絡追加一個Bottom Blob
  • AppendParam:爲網絡追加一個權值Blob

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章