caffe框架下添加新层

一,概述

新层YxyLayer实现一个特别简单的功能,目的在于理解caffe中层的底层结构。

YxyLayer的功能:正向就是一个直接复制的过程,反向将梯度缩放制定的倍数。有时我们的网络存在分支,但我们不希望某一分支影响之前层的更新,那么我们就将梯度放缩0倍。

该层只有一个参数:diff_scale,默认为1。

二,整体结构

在caffe根目录下进行一下4处更新:

1,在include/caffe/layers/ 目录下添加 yxy_layer.hpp 文件,作用:声明新层的头文件。

2,在src/caffe/layers/ 目录下添加 yxy_layer.cpp 文件,作用:对 yxy_layer.hpp 进行 cpu 上的实现。

3,在src/caffe/layers/ 目录下添加 yxy_layer.cu 文件,  作用:对 yxy_layer.hpp 进行 gpu 上的实现。(未实现,后续添加)

4,修改src/caffe/proto/ 目录下的caffe.proto 文件,作用:为YxyLayer添加参数和消息函数,这样我们才能在prototxt中使用新层。

三,实现细节

1,不同功能类型的层所引的头文件也不同,可以到 “include/caffe/layers” 和 “src/caffe/layers” 目录下找相似的现成的层参考。

2,(关键) 修改src/caffe/proto/ 目录下的caffe.proto 文件,为YxyLayer添加参数和消息函数。一定要严格按照大小写!!!

(1)首先,在文件末添加消息函数:

(2)然后,YxyLayer有一个diff_scalev参数,因此我们首先应该在message LayerParameter {}中添加新参数信息。添加信息时,首先要制定一个唯一ID,这个ID的可选值可以由这句话看出:

caffe框架下添加新层_第1张图片

 可选ID是151,因此按图所示添加完成,记得添加后把注释中的151改为152,方便下次添加。

(3)添加新参数信息后,在message V0LayerParameter {}添加参数定义 :

(4)最后,在message V1LayerParameter {}中的enum LayerType {}中的第一行添加唯一ID:

这里ID只要不重复即可。(可能在 prototxt 定义层中的type用的就是这个名字,待定。)

外面接着添加,同样ID也是只要不重复即可:

caffe框架下添加新层_第2张图片

四, 重新编译 caffe 即可使用

cd caffe

make clean

make all -j4

make pycaffe

然后就能用了,例:

caffe框架下添加新层_第3张图片

你可能感兴趣的:(Framework,Learning)