如何在caffe中自定义网络层
来源:互联网 发布:dota2赌博软件 编辑:程序博客网 时间:2024/04/24 22:17
如何在caffe中自定义网络层
尽管Caffe已经为用户提供了相当多的可用的层,但是面对各种各样的深度学习应用,这些层是远远不够的,为此,我们可能需要定义自己的层来达到特定的功能。
一般情况下,如果仅仅需要对某个层进行少量的修改,可以直接修改源码中对应的层,然后重新编译。这种方法好处就是不需要去建立新的文件,也不需要修改proto等,但是坏处也很明显,你无法再使用原来的这个层,如果你确实不再用这个层,那这个还是可行的;如果你有可能还是需要原来的层呢?那么只好自己新建一种层了。
新建网络层的步骤
1、选择继承的类
可以根据自己的需要,从已有的类中选择自己继承的类,这样可以省却很多麻烦。一般可以继承的类包括
其实说的这几个只是举个例子,你还可以继承其他的任何层,但是一定要清楚自己的层的功能是不是和原来的层有继承关系,如果没有,最好不要继承。
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的各种帮助(才刚开始做,内容略少,后续会持续更新),有兴趣的话,可以多多关注。
0 0
- 如何在caffe中自定义网络层
- 如何在caffe中自定义网络层
- 在caffe中添加自定义层
- caffe如何自定义网络以及自定义层(python)(一)
- caffe如何自定义网络以及自定义层(python)(二)
- caffe如何自定义网络以及自定义层(python)(五)
- caffe如何自定义网络以及自定义层(python)(六)
- 如何在Caffe中配置每一个层的结构
- 如何在Caffe中配置每一个层的结构
- 如何在Caffe中配置每一个层的结构
- 如何在Caffe中配置每一个层的结构
- 如何在Caffe中配置每一个层的结构
- 转:如何在Caffe中配置每一个层的结构
- 如何在Caffe中配置每一个层的结构
- 如何在Caffe中配置每一个层的结构
- 如何在Caffe中配置每一个层的结构
- 如何在caffe中配置每一个层的结构
- Caffe 中添加自己的网络层
- 常用java正则表达式
- 二.djangoECHO项目的建立
- 深度学习入门:Fully Convolutional Networks for Semantic Segmentation
- 做产品分析时,问清楚这 60 个问题
- Java8 十大新特性
- 如何在caffe中自定义网络层
- Android Studio导入github下载的project和module的正确姿势
- 终于做了第一个可以用的~~~计算器 为自己鼓掌
- C++中多线程的加锁机制
- Symbols in LaTeX
- 关于C++的问题
- 简化MongoAPI(spring-data-mongo)第一部分
- 正则表达式口诀
- 改变文件访问权限