目錄(?)
[-]
一caffe單步除錯
二caffe入口函式
三初始化訓練網路
四前向傳播
五反向傳播
本文主要是介紹我在閱讀caffe過程中參考的順序以及**。
首先閱讀caffe看了知乎上面的這篇文章 深度學習caffe的**怎麼讀?參考的是gein chen
大神的回答:
1.先讓程式跑起來,看看結果,這樣就會有直觀的感受。
2.單步除錯,跟著caffe在網路裡流動。
3.個性化定製caffe。
4.理解並實現backpropagation。
本文主要是進行了簡單的單步除錯,並跟著網路的結構看了網路的init() forward()以及backward()的過程。現在將我看的大概過程給大家分享。
1.config檔案中將debug設定為1。
2.重新編譯caffe。
3.使用gdb —arg 例如:
gdb --args ./build/tools/caffe.bin train --solver=examples/mnist/lenet_solver.prototxt
4.在caffe.cpp(caffe的入口函式)中設定斷點
5.gdb - r 讓程式run起來
1.caffe 入口函式參考:caffe.cpp 程式入口分析
這篇文章從caffe的main函式出發,介紹了caffe一步一步如何向下執行,同時這篇文章還科普了
typedef、#define 巨集定義等等基礎知識,非常適合初學者閱讀。
2.caffe 訓練網路參考:(caffe,lenet)訓練網路入口
這篇文章講了如何將solver引數讀入進去,solver如何建立、solver::solve()函式以及如何呼叫到sgdsolver()上以及solver::step()函式等等,非常適合看完上篇main函式之後,在接著看caffe.cpp中的train函式。
初始化訓練網路的文章參考文章:初始化訓練網路
這篇文章講了如何將net的引數讀入到網路,網路的整體結構、網路的資料層、卷積層、pooling層、全連線層 softmax等等的初始化,以及每乙個層blob的結構是什麼樣進行了介紹。
關於測試網路的初始化也可以參考:測試網路的初始化
前向傳播的文章可以參考文章:(caffe,lenet)前向計算
這篇文章主要剖析caffe中net::forward()函式,即前向計算過程。
這裡主要說一下卷積層的實現,其他層的實現相對較簡單。
卷幾層的實現可以參考caffe作者賈楊清關於卷幾層的說明:caffe卷幾層是如何實現
說明了為何使用im2col的方法來實現卷積,雖然比較佔記憶體。這裡im2col的方法需要花時間去理解。
caffe反向傳導演算法
這篇文章雖然只是以全連線層以及softmax層為例介紹了caffe反向傳播是如何完成,這篇文章包含了公式推導以及那些實現是如何與公式完美結合。
個人建議是閱讀反向傳播之前將反向傳播自己推導一遍,然後對著源**看,這樣對**的理解會更加深刻與清晰。
單步除錯 番外篇 使用gdb對程式進行除錯
在微控制器開發中,如keil或者iar,我們可以直接插上我們的jlink,很輕鬆的在開發環境上設定斷點,單步執行,檢視變數等除錯動作,所以就有好多從微控制器轉到linux上的使用者感覺很不習慣,上篇的番外對makefile的介紹也是由於這個原因,因為我們在整合開發環境中點一下編譯就可以了。完全把我們...
gdb單步除錯c應用程式
0 報錯資訊 2019 12 28 14 59 34 023 kms server.c 0178 get the sign sigse 2019 12 28 14 59 34 023 kms server.c 0180 kms exit by signal 11 1 檢視程序號 imipay ips...
Android ndk 單步除錯
1.設定ndk目錄 在 android 配置項上設定下 ndk 選擇ndk後,有乙個選項 ndk location 這裡配置ndk根目錄。如下圖 2.新增ndk支援 android專案上右鍵,選擇 android tools 再新增native的支援。如果不需要除錯,這時編譯環境已經ok了 3.修改...