Caffe 單獨測試添加的layer


轉載請注明出處,樓燚(yì)航的blog,http://home.cnblogs.com/louyihang-loves-baiyan/

一般我們在使用Caffe的時候,可能需要根據自己的任務需求添加一些自定義的Loss,當然這個Loss可以根據自己的需要來添加。比如在這里我添加的是triplet_loss為例

  • 首先需要在caffe.proto中添加相應的ID號和MessageParameter
  • 建立相應的頭文件.hpp和實現文件.cpp
  • 如果是某一些特殊的layer,可能對CUDA有要求,不過對於Loss這種層直接用CPP來實現是不太會影響模型訓練的速度
  • caffe的版本變得比較快,大家在參照網上的一些添加新的層時要注意一些已經改了的接口,某些layer的合並,當時我在添加layer的時候就看到新的一版caffe中,所有的layer都歸並到了vision_layer,Loss_layer,common_layer,跟之前網上看到的caffe目錄格式已經變了。因此需要靈活變通一下。
  • 最后添加的layer 最好是在Caffe\src\test目錄下再新建一個test文件,確保網絡可以test通過,因為一般代碼偶爾還是會帶點邏輯問題的,到最后訓練的時候出問題得不償失

在這里如果我們要添加一個新的loss,建立了相應的頭文件和實現文件,在書寫測試文件。
如果直接運行

make all
make test
make runtest

雖然make 命令會根據編譯文件的時間戳來跳過大部分文件,但是make runtest花的時間會比較長,因為他把所有的test文件都跑了一遍,當我們自己需要添加文件時,並不需要runtest。

這個時候我們需要稍微修改一下makefile,我覺得雖然我們現在不是手寫makefile,但是基本的一些makefile的語法規則還是要了解一下的。
根據make命令的格式

make [target]

我們在make 時執行的就是后面的target,因此打開makefile文件

下圖是我直接make runtest時的報錯,一般都不會那么順利噠.

因此為了不必要的每次make runtest,我們看一下makefile內部這里要說一下makefile 的格式

target: $(prerequisite)
[tab] [command]

首先我們需要明白make 做的事構建,對應的是我們IDE中的build,他並不是compile,是准備各種資源配置,為編譯做准備,具體的編譯還是交給了GCC這樣的編譯器。

在上面的格式中,首行中的target 目標我們的目標,在我們make runtest,則會跳轉到這個target開始執行,冒號后面跟着的是前置條件,即這個target要滿足的依賴條件第二行是一個tab鍵,

當我們在make runtest之前,我們已經執行了make test,即會生成test相關的可執行文件,因此在這里我們輸入我們相應的.testbin文件路徑,這個應該是在.build_release/test/目錄下,因此我們可以添加一個我們自己的target如下

這樣我們在跑的時候每次make allmake test 之后直接運行make runtest_triplet,即直接運行我們需要的test文件,方便我們進一步做測試和修改


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM