在新版本caffe里添加新的一层(向旧格式中加)


由于需要改写caffe,所以找了下相关的改写博文:

经过自己亲自尝试,使用博文二加上博文一 的4 可以添加一个新层,当然这只是初步的,具体改代码后续。。。

博文一:

1、首先写好你添加层的cpp和cu文件,另外在cpp文件的最后写上REGISTER_LAYER_CLASS(LAYERTYPENAME);其中LAYERTYPENAME是你定义的layer的类名,如MyInputLayer,那么就是REGISTER_LAYER_CLASS(MyInput);,注意不是MyInputLayer。

2、然后在相关的头文件里添加层类的声明

3、在proto文件里定义层的类型和message

4、在upgrade_proto.cpp里const char* UpgradeV1LayerType(const V1LayerParameter_LayerType type) {
  switch (type) {}里添加相关代码case...return

5、写prototxt网络模型文件的时候要注意type的格式


博文二:

今天实现了在caffe框架中加入一个层,完成欧式距离的任务。之所以这样,是因为还没有实现自己想要的loss,只是试着学者,看能不能把添加层的流程顺下来。最后实现了。
(一)总体框架
1)在./src/caffe/proto/caffe.proto 中增加 对应layer的paramter message;查找euclidean,然后根据euclidean_loss加一个whole_loss,加一个数就可以了。
2)在./include/caffe/layers/ 文件夹中增加该layer的类的声明.h文件,直接将欧式距离的hpp文件euclidean_loss_layer.h复制,命名为whole_loss_layer.h,然后打开文件,将euclidean替换为whole,注意大小写。
3)在./src/caffe/layers/目录下新建.cpp和.cu文件,进行类实现。也是复制,然后改文件名,替换文件中的euclidean,注意大小写。
4)在./src/caffe/gtest/中增加layer的测试代码,对所写的layer前传和反传进行测试,测试还包括速度。
最后一步很多人省了,或者没意识到,但是为保证代码正确,建议还是严格进行测试,磨刀不误砍柴功。
(二)编译
make all -j 8
(三)测试
找一个工程代码,将代码中的network定义文件中的euclidean_loss_layer层换为whole_loss_layer层

注意:一定要注意细节,大小写

下一步:实现自己的损失函数,要用cblas函数改写。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值