caffe使用gdb單步除錯及原始碼閱讀

2021-07-15 20:02:17 字數 1548 閱讀 3526

目錄(?)

[-]

一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.修改...