Caffe 中新增自己的網路層

2021-07-24 12:07:47 字數 2135 閱讀 7819

caffe 中有眾多的網路層,最新版本的**已經涵蓋了很多種型別的網路層,然而,有時候由於各種原因,其給定的網路層不能滿足我們的要求,這時候就要對其更改,以使其滿足自己的需求,感謝作者開源**以及眾多的**維護者。

由於caffe 中的網路層都是直接或者間接地給予layer 基類,所以,在我們需要新增新的型別時,就需要選擇好自己的基類,以使我們能夠更好的利用基類已有的一些方法。我們新建的類可以基於 

1. 直接繼承於layer 

2. 繼承於datalayer 

3. 繼承於neuronlayer 

4. 繼承於losslayer 

5. 或者如果是直接想改進某個層的**,可以直接繼承該類,並做相對應的修改即可。

第一步, 新增標頭檔案.h ,可以自己新建乙個標頭檔案,或者追加到乙個已有的標頭檔案後面,比如include/datalayer.hpp 等, 在裡面定義一些類變數等。

第二步,新增實現檔案,建立類的實現函式,放在src/***.cpp 中,如果有cuda實現,則需要新增相對應的.cu檔案實現,主要需要寫layersetup ,reshape ,forward ,backup 函式。

第三步, 註冊類,到src/caffe/layer_factory.cpp 中新增對應的類,在其中加入

register_layer_class(mylayer, mylayer);
第四步,在src/caffe/proto/caffe.proto 檔案中,新增對應的類以及類引數。 

在enum layertype {}中新增一行

enum

layertype

//其中mylayer 是新新增的類名,id是類編號,注意不能更之前的重複。

再新增類引數

optional mylayerparameter mylayer_param =id2; //其中mylayerparameter 是網路層引數,id2 是id

最後定義類引數

message mylayerparameter
第五步,寫測試檔案,這個是可選的,不過為了合併到github中,需要測試通過。

參考:1.在 include/caffe/vision_layers.hpp 中新增 wtflayer的定義,由於此處不實現gpu函式,因此注釋掉了gpu函式

[cpp]view plain

copy

template

<

typename

dtype>  

class

wtflayer : 

public

baseconvolutionlayer  

virtual

inline

const

char

* type() 

const

protected

:  virtual

void

forward_cpu(

const

vector*>& bottom,  

const

vector*>& top);  

//virtual void forward_gpu(const vector*>& bottom,

//    const vector*>& top);

virtual

void

backward_cpu(

const

vector*>& top,  

const

vector<

bool

>& propagate_down, 

const

vector*>& bottom);  

//virtual void backward_gpu(const vector*>& top,

//    const vector& propagate_down, const vector*>& bottom);

virtual

inline

bool

reverse_dimensions()   

virtual

void

compute_output_shape();  

}; 

caffe新增自己編寫的Python層

由於python的靈活性,我們在caffe中新增自己定義的層時使用python層會更加方便,開發速速也會比c 更快,現在我就在這兒簡單說一下如何在caffe中新增自定義的python層 使用的原網路結構時lenet結構 然後在 home zf caffe examples mnist lenet t...

caffe中新增local層

修改makefile.config 我是將cuudn注釋掉,去掉cpu only的注釋 make all make test 其中local test出錯,將檔案中gpu部分注釋掉即可 make runtest 將python路徑在.bashrc中更改 export pythonpath home ...

如何向caffe中新增層

修改caffe src caffe proto caffe.proto 在最後新增centerloss層的引數資訊 message centerlossparameter 新增層型別資訊,注意不能與其他層的數字相同。optional centerlossparameter center loss p...