caffe之具體執行流程分析

2021-08-06 04:07:07 字數 2641 閱讀 3834

我們都知道要執行乙個caffe model的時候需要在命令列下輸入:

./build/tools/caffe train -solver ***.prototxt
然後模型就跑起來了,但是具體程式的入口——main是哪個,執行的順序是如何的可能不是特別清晰,為了更加理解caffe,在此對其流程做乙個具體的分析。

分析方法很簡單,細看執行model之後的,輸出的log,比如在此執行lenet model:

./build/tools/caffe train -solver examples/mnist/lenet_solver.prototxt
你會得到如下log:

i0708 09:53:58.417726

3435 caffe.cpp:218] using gpus 0

i0708 09:53:58.560006

3435 caffe.cpp:223] gpu 0: titan x (pascal)

i0708 09:54:01.458295

3435 solver.cpp:44] initializing solver from parameters:

...i0708 09:54:01.458588

3435 solver.cpp:87] creating training net from net file: examples/mnist/lenet_train_test.prototxt

i0708 09:54:01.459116

3435 net.cpp:294] the netstate phase (0) differed from the phase (1) specified by a rule in layer mnist

i0708 09:54:01.459144

3435 net.cpp:294] the netstate phase (0) differed from the phase (1) specified by a rule in layer accuracy

i0708 09:54:01.459230

3435 net.cpp:51] initializing net from parameters:

......

...

觀察程式執行的具體哪個.cpp 及哪一行**,即可理解,因此可得caffe具體執行流程如下:

step1:命令列下輸入./build/tools/caffe train -solver ***.prototxt 執行了程式的入口caffe.cpp main()

step2:caffe.cpp main()根據命令列輸入的引數train 呼叫caffe.cpp train()

step3:caffe.cpp train()讀取***.prototxt的引數呼叫solver.cpp solver()的建構函式建立solver物件

step4:建立solver物件的時候需要呼叫solver.cpp init()函式來初始化模型的網路

step5:solver.cpp init()函式呼叫solver.cpp inittrainnet()和inittestnets()函式來分別初始化訓練和測試網路。

step6:inittrainnet() 通過***.prototxt 指定的***net.prototxt讀取net的引數,呼叫net.cpp net()的建構函式,建立訓練網路,

step7:net.cpp net()呼叫net.cpp init()函式,通過for迴圈來1)建立網路中每乙個layer物件,2)設定bottom和top,3)呼叫layer.cpp setup()

step8:呼叫inittestnets()建立測試網路,與inittrainnet()類似

step9:執行返回到caffe.cpp train()中,利用建立好的solver物件呼叫solver.cpp solve()函式

step11:執行結束

可能有點繞,總結而言就是:

1.入口函式caffe.cpp main()(呼叫caffe.cpp train())

2.caffe.cpp train()中 建立solver物件(呼叫solver.cpp init())

3.solver.cpp init()中 solver.cpp inittrainnet()和inittestnets()建立訓練網路和測試網路

4.執行返回到caffe.cpp train()中,呼叫solver.cpp solve()來訓練網路,具體訓練過程在solver.cpp step()中實現,迭代直至程式結束

Hive執行流程分析

先看0.7.1的執行過程 hive select from table02 where id 500000 對於這樣的乙個查詢,hive從clidriver這個類的main函式開始 clidriver.main string args clisessionstate ss new clisessio...

make menuconfig 執行流程分析

linux 2.6.20.6 make menuconfig 當在頂層目錄執行 make menuconfig 會執行頂層makefile 第415行的規則 config config scripts basic outputmakefile force q mkdir p include linu...

SpringMVC執行流程分析

在整個 spring mvc 框架中,dispatcherservlet處於核心位置,負責協調和組織不同元件以完成請求處理並返回響應的工作 springmvc處理請求過程 1 若乙個請求匹配dispatcherservlet的請求對映路徑 在 web.xml 中指定 web 容器將該請求轉交給dis...