如何在caffe中自定义网络层

在Caffe深度学习框架中,当预置层不足以满足需求时,需要自定义网络层。这包括选择合适的基类,修改代码,编写头文件和实现文件,注册类,添加proto消息,以及编写测试函数。虽然看似复杂,但通过参考已有层的实现,可以简化这一过程。
摘要由CSDN通过智能技术生成

如何在caffe中自定义网络层

尽管Caffe已经为用户提供了相当多的可用的层,但是面对各种各样的深度学习应用,这些层是远远不够的,为此,我们可能需要定义自己的层来达到特定的功能。

一般情况下,如果仅仅需要对某个层进行少量的修改,可以直接修改源码中对应的层,然后重新编译。这种方法好处就是不需要去建立新的文件,也不需要修改proto等,但是坏处也很明显,你无法再使用原来的这个层,如果你确实不再用这个层,那这个还是可行的;如果你有可能还是需要原来的层呢?那么只好自己新建一种层了。

新建网络层的步骤

1、选择继承的类
可以根据自己的需要,从已有的类中选择自己继承的类,这样可以省却很多麻烦。一般可以继承的类包括
描述
Layer如果你要定义的层和已有的层没有什么重叠,那么可以选择直接继承Layer
DataLayer自定义网络输入层时,可以考虑继承它,内部的load_batch可能是你要重写的函数
NeuronLayer自定义神经层,也就是中间的进行运算的层
LossLayer如果现有的损失函数层不能满足需求,可以继承它

其实说的这几个只是举个例子,你还可以继承其他的任何层,但是一定要清楚自己的层的功能是不是和原来的层有继承关系,如果没有,最好不要继承。

2、修改代码
  • 添加自己的头文件,以 .h 结尾,放到 include 文件夹中。
  • 添加头文件对应的实现文件,放到 src/caffe/layers中,如果你要用GPU模式,则需要对应的 .cu 文件,也就是该层CUDA实现。
  • 注册自己的类。在src/caffe/layer_factory.cpp中加入自己的类名,可以仿照该文件中别的层写法,注意名字不能重复。
  • 在src/caffe/proto/caffe.proto添加proto消息。以message XXXParameter {…}方式添加,具体的可以参考你继承的类。
  • 写测试函数,测试你的层到底有没有实现正确的功能。

写在最后

以上写的这些也不过是给了一些自定义层的建议,没有实际的展示例子,我后面会尽量补充上来。添加自己的层看起来似乎很难,但是实际上有好多Caffe已有的层作为例子,还是很好实现的。另外,要想添加自己的层,还是需要一些c++模板、多态等方面的只是,至少要知道什么是模板,哪些是重写,哪些是覆盖。

本人创建了一个Github项目,主要是做Caffe的各种帮助(才刚开始做,内容略少,后续会持续更新),有兴趣的话,可以多多关注。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值