之前那個博客記錄了如何實現一個自己的層,這篇教你如何進行層的調試。
首先把你在caffe/src/caffe/layers中你自己層的cpp代碼copy到caffe/src/caffe/test中
然后改名(因為我看那個目錄里面命名都是這樣命名的):
接着就按照這篇博客的做:http://www.cnblogs.com/louyihang-loves-baiyan/p/5260863.html
當你添加一個新的layer后,需要測試添加的layer是否正確:
首先make all或者make生成頭文件和實現文件
接着make test生成所有的測試文件
最后make runtest跑你所有的測試文件
第一次make的時候會把所有的文件進行編譯鏈接,如下圖:
之后的make都只編譯鏈接新的文件,下圖是沒有新的文件下做的make:
make test也是同樣的:
下面兩張圖是make test過程中的終端顯示,cxx代表c++編譯器,可以看到在編譯這些cpp文件,編譯生成的文件都放在.build_release目錄下,這是個隱藏目錄,並且如果你不make test,是不會生成的
但make runtest就不同,每次都會跑所有的test例子
make runtest跑所有的例子非常耗費時間,那篇博客就教你怎么只runtest你新添加的層。
下圖是原本caffe/src/caffe/test目錄下放的一些源代碼,發現只有test_im2col_kernel.cu這一個是cuda代碼,其他都是cpp。不過這證明test既可以test cpp代碼,也可以cuda代碼。
這是test生成的可執行文件,那個cuda代碼變成了test_im2col_kernel.testbin
這是我按照博客寫的3個層的runtest:
后兩個都是caffe自帶的層,第三個就是那個自帶的cuda程序
這是第二個runtest的情況
這是第三個runtest的情況
沒看出兩者有什么區別,只是可以看到第二個的測試例子既在cpu上跑了,也在gpu上跑了。
src/caffe/test下的test文件應該是單獨寫,我自己是直接把實現的layer放進去,這本身就不正確。
還有我的layer寫了注冊的宏,再編譯的時候就報你已經注冊了。因為你之前編譯layer層的時候已經注冊過一次了。