之前那个博客记录了如何实现一个自己的层,这篇教你如何进行层的调试。
首先把你在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层的时候已经注册过一次了。