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文件,方便咱们进一步作测试和修改

相关文章
相关标签/搜索