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