你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
输入关键字进行搜索
搜索:
没有找到相关结果
ruirui_ICT - 听大大们说,要“左手代码,右手公式”,喵~
赞同来自: cjwdeq 、今天可以2 、牧马人夏峥123 、Francis_ZHOU 、CCamaro321 、suge2016更多 »
INSTANTIATE_CLASS(InnerProductLayer); REGISTER_LAYER_CLASS(InnerProduct);
option NewLayerParameter new_layer_param = 140;
今天可以2
赞同来自:
0xcc - boom shakalaka
要回复问题请先登录或注册
3 个回复
ruirui_ICT - 听大大们说,要“左手代码,右手公式”,喵~
赞同来自: cjwdeq 、今天可以2 、牧马人夏峥123 、Francis_ZHOU 、CCamaro321 、suge2016更多 »
下面讲讲如何在caffe中添加一个新的层。官网的wiki里有一个比较不错的介绍,可以参考一下caffe github: Developing new layers。下面我会讲一个例子,如何添加一个层实现和全连接层InnerProductLayer一模一样的功能(然后就可以偷懒复制全连接层的代码了o(* ̄︶ ̄*)o)
假设现在要添加的层名叫NewLayer,添加一个层和添加一个类很像,需要写这个层的头文件、cpp文件(如果想在GPU上跑还需要写cu文件),由于需要在prototxt里设置这个层的参数,还需要在caffe.proto里定义这个层的参数类,然后再把其他细节的地方(比如注册层)写好,就差不多了。
1.写头文件。原来版本的caffe在include里分了四大类,vision\common\loss\data layer,现在的版本好像变成每个层有自己单独的hpp文件了。比如原来的InnerProductLayer的声明都是写在common_layer.hpp中的,可以参考一下,写好函数和一些内部参数的声明和定义。
2.写cpp/cu文件。一般会写在src中的layer文件夹里,包含LayerSetup\Reshape\Forward\Backward四大函数,LayerSetup会进行一些check,初始化一些参数什么的,Reshape会对参数分配空间,Forward和Backward会计算前向和后向传播,当然cpp文件里写的是cpu上的,cu文件里写gpu上的计算(一般来说计算的方法和结果是一样的,于是很多人偷懒就只写cu文件里的实现),一般cu文件里就只需要写Forward和Backward,LayerSetup和Reshape写在cpp文件里就好了。需要注意一下在cpp文件最后会对层进行注册,如下
3.在caffe.proto文件中添加这个层的参数,首先需要在message LayerParameter中设置一个ID号(顺着往下加),类似于 然后在后面添加NewLayerParameter的一些成员,然后就可以在train.prototxt文件中给这些参数赋值了。题主如果比较关注conv层,可以查看一下message ConvolutionParameter。
4.最后添加一些其他可能需要的地方,比如在upgrade_proto.cpp中添加一些if。。这个文件我没弄太清楚,我理解的是prototxt里有一些不同的层的参数名字是一样的,所以需要update一下才不会乱。
总体讲大概就是这个流程,希望对大家有帮助O(∩_∩)O~
(针对最近大大们头疼的侵权问题,在这里弱弱的加一句:本内容为本人原创,仅授权给CaffeCN社区(caffecn.cn)使用,如需转载须注明转载来源。(⊙v⊙))
今天可以2
赞同来自:
这里有介绍,不过不全面
你可以直接看./src/caffe/proto/caffe.proto文件,不过刚开始看可能比较烦
0xcc - boom shakalaka
赞同来自:
写好hpp和cpp扔进去就OK了