one stage之自定義層

2021-09-26 04:30:38 字數 1180 閱讀 3390

keras 提供眾多常見的已編寫好的層物件,例如常見的卷積層,池化層等,我們可以直接通過**呼叫,keras中的層大致上分為兩種型別

第一種是帶有訓練引數的,比如dense層,conv2d層等等,我們在訓練的過程中需要訓練層的權重和偏置項.

第二種是不帶訓練引數的,比如dropout層,flatten層等等,我們不需要訓練它的權重,只需要對輸入進行加工處理再輸出就行了.

在實際應用中,我們經常需要自己構建一些層物件,一滿足某些自定義網路的特殊需求,也無非就是上面兩種,一種是帶有引數的,一種是不帶引數的,不管是哪一種,幸運的是,keras對自定義層都提供了良好的支援.

下面我們著重來看下自定義層,對於自定義層來說,必須要實現3個核心的方法

(1)build 方法(input_shape):這是定義權重的方法,可訓練的權重應該在這裡被加入列表self.trainable_weights中,其他的屬性還包括self.non_trainable_weights(列表),和self.updates(,但在one-stage中,沒見到寫這個方法.

(2)call 方法這個是定義層功能的方法,除非你希望你寫的層支援masking,否則你只需要關心call的第乙個引數:輸入張量

在自定義層kenal-->layers-->_misc.py-->class regresboxes,call方法是

def call(self, inputs, **kwargs):

anchors, regression = inputs

return backend.bbox_transform_inv(anchors, regression, mean=self.mean, std=self.std)

(3)compute_output_shape(input_shape)方法,如果你的層修改了輸入資料的shape,你應該在這裡指定shape變化的方法,這個山數使得keras可以做自動shape推斷.在自定義層kenal-->layers-->_misc.py-->class regresboxes, compute_output_shape(

方法是

def compute_output_shape(self, input_shape):

return input_shape[0]

CALayer自定義層

自定義層,其實就是在層上繪圖,一共有2種方法,下面詳細介紹一下。方法描述 建立乙個calayer的子類,然後覆蓋drawincontext 方法,使用quartz2d api進行繪圖 pragma mark 繪製乙個實心三角形 4 void drawincontext cgcontextref ct...

自定義載入層

這裡我給最外面的盒子設定了跟視窗一樣的寬跟高為了結束不讓載入層顯示出來之後還可以點到按鈕。function window.onresize function function sethw 外面的盒子就遮住了所有的內容只有載入層了。這裡我還寫了如何去觸發這個載入層,由於一開始載入層是不需要去呼叫的我吧...

Keras 自定義層

keras自定義或者重寫層,需要實現三個方法 問題 參考 keras 自定義層 最後舉乙個conditional layer normalization的例子 基於conditional layer normalization的條件文字生成 自定義層需要實現三個方法 class layernorma...