之前那个博客记录了如何实现一个自己的层,这篇教你如何进行层的调试。

首先把你在caffe/src/caffe/layers中你自己层的cpp代码copy到caffe/src/caffe/test中

然后改名(因为我看那个目录里面命名都是这样命名的):

Caffe 单独测试添加的layer

接着就按照这篇博客的做:http://www.cnblogs.com/louyihang-loves-baiyan/p/5260863.html

当你添加一个新的layer后,需要测试添加的layer是否正确:

  首先make all或者make生成头文件和实现文件

  接着make test生成所有的测试文件

  最后make runtest跑你所有的测试文件

第一次make的时候会把所有的文件进行编译链接,如下图:

Caffe 单独测试添加的layer

之后的make都只编译链接新的文件,下图是没有新的文件下做的make:

Caffe 单独测试添加的layer

make test也是同样的:

Caffe 单独测试添加的layer

Caffe 单独测试添加的layer

下面两张图是make test过程中的终端显示,cxx代表c++编译器,可以看到在编译这些cpp文件,编译生成的文件都放在.build_release目录下,这是个隐藏目录,并且如果你不make test,是不会生成的

Caffe 单独测试添加的layer

Caffe 单独测试添加的layer

Caffe 单独测试添加的layer

但make runtest就不同,每次都会跑所有的test例子

Caffe 单独测试添加的layer

Caffe 单独测试添加的layer

make runtest跑所有的例子非常耗费时间,那篇博客就教你怎么只runtest你新添加的层。

 

下图是原本caffe/src/caffe/test目录下放的一些源代码,发现只有test_im2col_kernel.cu这一个是cuda代码,其他都是cpp。不过这证明test既可以test  cpp代码,也可以cuda代码。

Caffe 单独测试添加的layer

这是test生成的可执行文件,那个cuda代码变成了test_im2col_kernel.testbin

Caffe 单独测试添加的layer

 

 

这是我按照博客写的3个层的runtest:

Caffe 单独测试添加的layer

后两个都是caffe自带的层,第三个就是那个自带的cuda程序

这是第二个runtest的情况

Caffe 单独测试添加的layer

这是第三个runtest的情况

Caffe 单独测试添加的layer

没看出两者有什么区别,只是可以看到第二个的测试例子既在cpu上跑了,也在gpu上跑了。

 

src/caffe/test下的test文件应该是单独写,我自己是直接把实现的layer放进去,这本身就不正确。

还有我的layer写了注册的宏,再编译的时候就报你已经注册了。因为你之前编译layer层的时候已经注册过一次了。

Caffe 单独测试添加的layer