• 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 最好是在Caffesrc est目录下再新建一个test文件,确保网络可以test通过,因为一般代码偶尔还是会带点逻辑问题的,到最后训练的时候出问题得不偿失

    在这里如果我们要添加一个新的loss,建立了相应的头文件和实现文件,在书写测试文件。
    如果直接运行

    make all
    make test
    make runtest
    

    虽然make 命令会根据编译文件的时间戳来跳过大部分文件,但是make runtest花的时间会比较长,因为他把所有的test文件都跑了一遍,当我们自己需要添加文件时,并不需要runtest。

    这个时候我们需要稍微修改一下makefile,我觉得虽然我们现在不是手写makefile,但是基本的一些makefile的语法规则还是要了解一下的。
    根据make命令的格式

    make [target]
    

    我们在make 时执行的就是后面的target,因此打开makefile文件

    下图是我直接make runtest时的报错,一般都不会那么顺利哒.

    因此为了不必要的每次make runtest,我们看一下makefile内部这里要说一下makefile 的格式

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

    首先我们需要明白make 做的事构建,对应的是我们IDE中的build,他并不是compile,是准备各种资源配置,为编译做准备,具体的编译还是交给了GCC这样的编译器。

    在上面的格式中,首行中的target 目标我们的目标,在我们make runtest,则会跳转到这个target开始执行,冒号后面跟着的是前置条件,即这个target要满足的依赖条件第二行是一个tab键,

    当我们在make runtest之前,我们已经执行了make test,即会生成test相关的可执行文件,因此在这里我们输入我们相应的.testbin文件路径,这个应该是在.build_release/test/目录下,因此我们可以添加一个我们自己的target如下

    这样我们在跑的时候每次make allmake test 之后直接运行make runtest_triplet,即直接运行我们需要的test文件,方便我们进一步做测试和修改

  • 相关阅读:
    唯一元素List UniqueList
    汉诺塔 Hanoi 递归示例demo附代码
    TreeView控件保存恢复结点展开状态
    F#个人学习笔记2(F# survey)
    F#个人学习笔记1(F# survey)
    多文件上传控件(附示例下载)
    由desktopsavemode引起的Emacs配置失效
    Emacs+hideif.el 隐藏预编译代码(或彩色显示预编译代码)
    Emacs的Tab键
    Emacs+highlightparentheses高亮括号
  • 原文地址:https://www.cnblogs.com/louyihang-loves-baiyan/p/5260863.html
Copyright © 2020-2023  润新知