【Caffe实践】 添加自己的网络层
from:http://blog.csdn.net/chenriwei2/article/details/46432727
寫在前面:
Caffe 中有眾多的網絡層,最新版本的代碼已經涵蓋了很多種類型的網絡層,然而,有時候由于各種原因,其給定的網絡層不能滿足我們的要求,這時候就要對其更改,以使其滿足自己的需求,感謝作者開源代碼以及眾多的代碼維護者。
由于Caffe 中的網絡層都是直接或者間接地給予Layer 基類,所以,在我們需要添加新的類型時,就需要選擇好自己的基類,以使我們能夠更好的利用基類已有的一些方法。我們新建的類可以基于
1. 直接繼承于Layer
2. 繼承于DataLayer
3. 繼承于NeuronLayer
4. 繼承于LossLayer
5. 或者如果是直接想改進某個層的代碼,可以直接繼承該類,并做相對應的修改即可。
具體步驟:
第一步, 添加頭文件.h ,可以自己新建一個頭文件,或者追加到一個已有的頭文件后面,比如include/DataLayer.hpp 等, 在里面定義一些類變量等。
第二步,添加實現文件,創建類的實現函數,放在src/XXX.cpp 中,如果有cuda實現,則需要添加相對應的.cu文件實現,主要需要寫LayerSetup ,reshape ,forward ,backup 函數。
第三步, 注冊類,到src/caffe/layer_factory.cpp 中添加對應的類,在其中加入
REGISTER_LAYER_CLASS(MYLAYER, MyLayer);第四步,在src/caffe/proto/caffe.proto 文件中,添加對應的類以及類參數。
在enum LayerType {}中添加一行
再添加類參數
optional MylayerParameter mylayer_param = ID2; //其中MylayerParameter 是網絡層參數,ID2 是ID最后定義類參數
message MylayerParameter {optional uint32 myparam1 = 1; optional bool myparam2 = 2 [default = true]; }第五步,寫測試文件,這個是可選的,不過為了合并到github中,需要測試通過。
總結
以上是生活随笔為你收集整理的【Caffe实践】 添加自己的网络层的全部內容,希望文章能夠幫你解決所遇到的問題。

- 上一篇: 【云计算虚拟化】docker在ubunt
- 下一篇: 【Caffe实践】基于Caffe的人脸识