转载请注明出处,楼燚(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。

这个时候我们需要稍微修改一下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文件,方便我们进一步做测试和修改

Caffe 单独测试添加的layer的更多相关文章

  1. 在Caffe添加Python layer详细步骤

    本文主要讨论的是在caffe中添加python layer的一般流程,自己设计的test_python_layer.py层只是起到演示作用,没有实际的功能. 1) Python layer 在caff ...

  2. 从零开始,搭建博客系统MVC5+EF6搭建框架(2),测试添加数据、集成Autofac依赖注入

    一.测试仓储层.业务层是否能实现对数据库表的操作 1.创建IsysUserInfoRepository接口来继承IBaseRepository父接口 namespace Wchl.WMBlog.IRe ...

  3. django 单独测试模块

    今天单独测试django的一个views文件,出现错误import的模块没有定义,这个模块是在django项目中自己编写的,解决办法: 1../manage.py shell 通过命令行进去加载,再执 ...

  4. 【干货】利用MVC5+EF6搭建博客系统(二)测试添加数据、集成Autofac依赖注入

    PS:如果图片模糊,鼠标右击复制图片网址,然后在浏览器中打开即可. 一.测试仓储层.业务层是否能实现对数据库表的操作 1.在52MVCBlog.IRepository程序集下创建IsysUserInf ...

  5. (Caffe)基本类Blob,Layer,Net(一)

    本文地址:http://blog.csdn.net/mounty_fsc/article/details/51085654 Caffe中,Blob.Layer,Net,Solver是最为核心的类,下面 ...

  6. layer层、modal模拟窗 单独测试页面

    layer_test.jsp <%@ page language="java" import="java.util.*" pageEncoding=&qu ...

  7. caffe源码阅读(2)-Layer

    神经网络是由层组成的,深度神经网络就是层数多了.layer对应神经网络的层.数据以Blob的形式,在不同的layer之间流动.caffe定义的神经网络已protobuf形式定义.例如: layer { ...

  8. 【神经网络与深度学习】caffe静态链接库“Unknown layer type: Convolution (known types: )”和“ 磁盘空间不足”问题的解决办法

    这一段时间把caffe在windows环境下编译了一下,tool里面的cpp全部编译成了exe.再用的时候有两个问题让我头疼了好长时间! 第一个问题 "db_lmdb.hpp:14] Che ...

  9. 使用caffe模型测试图片(python接口)

    1.加载相关模块 1.1 加载numpy import numpy as np 1.2 加载caffe 有两种方法. 方法一(静态导入): 找到当前环境使用的python的site-packages目 ...

随机推荐

  1. Visual Studio 2013 Unit Test Project App.config文件设置方法

    开放中经常会要做单元测试,新的项目又没有单元测试项目,怎么才能搭建一个单元测试项目呢? 下面跟我四步走,如有错误之处,还请指正! 1.添加项目 2.添加配置文件 新建app.config文件,注意不是 ...

  2. cron表达式详解[转]

    Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: Seconds Minutes Hours DayofMonth Month ...

  3. C# GDI绘制矩形框,鼠标左键拖动可移动矩形框,滚轮放大缩小矩形框

    最近工作需要,要做一个矩形框,并且 用鼠标左键拖动矩形框移动其位置.网上查了一些感觉他们做的挺复杂的.我自己研究一天,做了一个比较简单的,发表出来供大家参考一下.如觉得简单,可路过,谢谢.哈哈. 先大 ...

  4. EC笔记,第二部分:5.了解C++默默编写并调用哪些函数

    5.了解C++默默编写并调用哪些函数 1.C++空类 C++会为一个空类建立以下函数 (1).默认构造函数 (2).默认拷贝构造函数 (3).析构函数 (4).赋值运算符(如果成员包含引用类型或con ...

  5. MySQL数据库中delimiter的作用概述

    以下的文章主要是向大家描述的是MySQL数据库中delimiter的作用是什么?我们一般都认为这个命令和存储过程关系不大,到底是不是这样的呢?以下的文章将会给你相关的知识,望你会有所收获. 其实就是告 ...

  6. [moka同学笔记]六、Yii2.0课程笔记(魏曦老师教程)[徽章气泡]

  7. Singleton(单例模式)

    一. /** * lazy man(不是线程安全的) * @author TMAC-J * */ public class Singleton { private static Singleton i ...

  8. 对js中this的一点点理解

    1 当函数作为对象的方法被调用的时候 this就指向该对象 var o = { prop: 37, f: function() { return this.prop; } }; console.log ...

  9. css制作漂亮彩带导航条菜单

    点击这里查看效果:http://keleyi.com/keleyi/phtml/divcss/17.htm 效果图: 以下是源代码: <!DOCTYPE html PUBLIC "-/ ...

  10. 带节日和农历的js日历

    带农历的脚本: http://keleyi.com/keleyi/phtml/jstexiao/11.htm http://keleyi.com/tools/rili/ <html> &l ...