caffe框架下新增新層

2021-08-31 18:41:10 字數 1571 閱讀 3668

新層yxylayer實現乙個特別簡單的功能,目的在於理解caffe中層的底層結構。

yxylayer的功能:正向就是乙個直接複製的過程,反向將梯度縮放制定的倍數。有時我們的網路存在分支,但我們不希望某一分支影響之前層的更新,那麼我們就將梯度放縮0倍。

該層只有乙個引數:diff_scale,預設為1。

在caffe根目錄下進行一下4處更新:

1,在include/caffe/layers/ 目錄下新增 yxy_layer.hpp 檔案,作用:宣告新層的標頭檔案。

2,在src/caffe/layers/ 目錄下新增 yxy_layer.cpp 檔案,作用:對 yxy_layer.hpp 進行 cpu 上的實現。

3,在src/caffe/layers/ 目錄下新增 yxy_layer.cu 檔案,  作用:對 yxy_layer.hpp 進行 gpu 上的實現。(未實現,後續新增)

4,修改src/caffe/proto/ 目錄下的caffe.proto 檔案,作用:為yxylayer新增引數和訊息函式,這樣我們才能在prototxt中使用新層。

1,不同功能型別的層所引的標頭檔案也不同,可以到 「include/caffe/layers」 和 「src/caffe/layers」 目錄下找相似的現成的層參考。

2,(關鍵) 修改src/caffe/proto/ 目錄下的caffe.proto 檔案,為yxylayer新增引數和訊息函式。一定要嚴格按照大小寫!!!

(1)首先,在檔案末新增訊息函式:

(2)然後,yxylayer有乙個diff_scalev引數,因此我們首先應該在message layerparameter {}中新增新引數資訊。新增資訊時,首先要制定乙個唯一id,這個id的可選值可以由這句話看出:

可選id是151,因此按圖所示新增完成,記得新增後把注釋中的151改為152,方便下次新增。

(3)新增新引數資訊後,在message v0layerparameter {}新增引數定義 :

(4)最後,在message v1layerparameter {}中的enum layertype {}中的第一行新增唯一id:

這裡id只要不重複即可。(可能在 prototxt 定義層中的type用的就是這個名字,待定。)

外面接著新增,同樣id也是只要不重複即可:

然後就能用了,例:

caffe下新增新的loss層

caffe的使用當中,最神秘的就是caffe的原始碼,而我們要做一些創新點的話,基本上都是要修改caffe的原始碼。小魚和大家分享怎麼在caffe下新增新的層。比如要新增乙個新的loss函式 euclidean loss norm layer 1 需要編寫相應的euclidean loss norm...

Caffe學習系列 15 新增新層

如何在caffe中增加一層新的layer呢?主要分為四步 1 在.src caffe proto caffe.proto 中增加對應layer的paramter message 2 在.include caffe layers.hpp中增加該layer的類的宣告,表示有common layers.h...

在caffe框架中新增新增乙個簡單的新層

沒錯,我又來水經驗了。在深度學習網路框架caffe中新增乙個簡單的新層,用來實現原框架中所沒有的功能 輸出一句話,以及乙個看起來似乎並沒有什麼實際作用的引數,下面詳細展開來說。1.首先,本文實現的layer名稱為allpasslayer,這裡不能和已有的層同名,功能為將輸入到該層的資料不做任何改變直...