caffe實現自己的層

2021-09-07 15:26:32 字數 1904 閱讀 5880

將這篇部落格所講進行了實現

1.layerparameter也在caffe.proto檔案中

2.標頭檔案直接複製部落格的,命名為image_scale_layer.hpp,然後放在caffe/include/caffe/layers下

3.實現檔案也是直接複製部落格的,命名為image_scale_layer.cpp,放在caffe/src/caffe/layers下

4.製作minist的lmdb資料,放在examples/mnist下,這個部分另一篇部落格已經總結

5.在examples目錄下建立資料夾imagescale,複製部落格中網路的prototxt,並放在這個目錄下

6.複製部落格中solver的prototxt,放在examples/imagescale目錄下

7.複製部落格的bas**件,放在caffe目錄下。然後執行這個bas**件就完成

按照部落格的流程, 最後在執行shell指令碼時出現了錯誤:

我的solver的確在那個目錄下,我也不知道為何會報這個錯誤。之後我將指令碼的命令直接輸入在終端,即:

./build/tools/caffe train --solver=examples/imagescale/solver.prototxt

會出現以下錯誤

這時我反應過來應該是我沒有生成mnist_train_lmdb這個檔案,按照之前部落格的方式生成之後再執行這個命令就正確了。但執行那個指令碼還是報一樣的錯誤。

之前我按照上乙個部落格的命令sudo sh ./examples/mnist/create_mnist.sh

生成mnist_train_lmdb,會報下面的錯誤:

因為我是遠端訪問的伺服器,所以會造成現在這種permission denied的情況

總結整個流程:1.實現自己層的.hpp檔案,並放在include/caffe/layers目錄下

2.實現自己層的.cpp或.cu,並放在src/caffe/layers目錄下。注意:

需要在.cpp新增註冊的巨集定義:1.instantiate_class(myneuronlayer);  

2.register_layer_class(myneuron); 

如果有my_neuron_layer.cu,則新增:instantiate_layer_gpu_funcs(myneuronlayer);  

都是在cpp的末尾加

如果不加,會報以下錯誤:

3.修改src/caffe/proto/caffe.proto檔案,這個檔案要修改兩個地方:在layerparameter加id號,新增實現類所需要的引數。這樣你在編寫 train.prototxt 或者          test.prototxt 或者 deploy.prototxt 時就能把新 layer 的描述寫進去,便於修改網路結構和替換其他相同功能的 layer 了

4.編譯

5.你還可以在src/caffe/test/中增加layer的測試**,對所寫的layer前傳和反傳進行測試,就像另一篇自己寫的部落格caffe單獨測試新增的layer,但寫測試**

有點麻煩

中間寫的過程怎麼知道自己寫的正確不正確,怎麼去debug是我需要繼續思考的

Caffe 中新增自己的網路層

caffe 中有眾多的網路層,最新版本的 已經涵蓋了很多種型別的網路層,然而,有時候由於各種原因,其給定的網路層不能滿足我們的要求,這時候就要對其更改,以使其滿足自己的需求,感謝作者開源 以及眾多的 維護者。由於caffe 中的網路層都是直接或者間接地給予layer 基類,所以,在我們需要新增新的型...

caffe新增自己編寫的Python層

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

Caffe中卷積層的實現

出處 將尺寸為k k的卷積核在某個位置對應的feature map區域表示為k k的一維向量 將feature map各個通道對應的向量之間,串聯起來 那麼尺寸k k的卷積核在某個位置對應的各個通道的feature map,組合起來就是長度為c k k的一維向量。當卷積核對應到新的位置上,又得到新的...