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。ui

這個時候咱們須要稍微修改一下makefile,我以爲雖然咱們如今不是手寫makefile,可是基本的一些makefile的語法規則仍是要了解一下的。
根據make命令的格式code

make [target]

咱們在make 時執行的就是後面的target,所以打開makefile文件blog

下圖是我直接make runtest時的報錯,通常都不會那麼順利噠.
接口

所以爲了避免必要的每次make runtest,咱們看一下makefile內部這裏要說一下makefile 的格式ip

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

首先咱們須要明白make 作的事構建,對應的是咱們IDE中的build,他並非compile,是準備各類資源配置,爲編譯作準備,具體的編譯仍是交給了GCC這樣的編譯器。資源

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

當咱們在make runtest以前,咱們已經執行了make test,即會生成test相關的可執行文件,所以在這裏咱們輸入咱們相應的.testbin文件路徑,這個應該是在.build_release/test/目錄下,所以咱們能夠添加一個咱們本身的target以下
編譯器

這樣咱們在跑的時候每次make allmake test 以後直接運行make runtest_triplet,即直接運行咱們須要的test文件,方便咱們進一步作測試和修改

相關文章
相關標籤/搜索