caffe添加loss层

在Caffe中添加新的Loss层需要编写hpp、cpp和cu文件,并放置在相应目录。修改proto文件以添加层参数,若无参数则无需修改。编译时需确保新文件被添加至VS工程,否则会导致运行时找不到层。手动添加缺失的文件到libcaffe的cu/layers、include/layers和src/layers目录,完成编译后,新层即可正常工作。
摘要由CSDN通过智能技术生成

1 写好要添加的层的hpp cpp cu文件,cu文件非必需,看是否需要cuda加速
2 hpp文件放在include/caffe/layers文件夹下
3 cpp和cu放在src/caffe/layers文件夹下
4根据添加的层是否包含参数,更改caffe/src/proto下的caffe.proto
需要添加参数,则找到

// LayerParameter next available layer-specific ID: 152 (last added: box_annotator_ohem_param)

message LayerParameter {
  optional string name = 1; // the layer name
  optional string type = 2; // the layer type
  repeated string bottom = 3; // the name of each bottom blob
  repeated string top = 4; // the name of each top blob

// LayerParameter next available layer-specific ID: 152 (last added: box_annotator_ohem_param)

这一句表示下一个新添加的参数的ID应该从152开始,避免与之前的ID重复。
自己在下面添加新的层需要的参数就可以了

optional NEWLAYERParameter  NWELAYER_param = 152

然后再在message AllPassParameter { }中指定具体的该层的参数名称及default值

如果新加的层不含参数,如relu层,则不需要改proto文件

5 编译(important)
这里用的microsoft版本的caffe,使用vs2013编译,和cmake编译的不一样,也是出错的根本原因

按要求在文件夹中添加了三个文件以后,再编译vs顺利通过,但是再调用新层的时候还是报错

Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type: 

还是找不到该层
原因是在vs编译时,没有将新加的三个文件添加到工程中
在这里插入图片描述
打开libcaffe的小三角,看到cu/layers下面有一排的cu文件,里面没有你新加的那个层的对应文件的话,需要手动添加进来,两种方法,直接copy或者右键添加
同理还有include/layers和src/layers 分别添加hpp和cpp文件
再次编译,成功,训练中调用新层,成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值