使用keras自定義神經網路層

2021-10-23 12:37:55 字數 1517 閱讀 3164

「現在的深度學習無非就是堆神經網路模型」這句話既對也不全對,深度學習能夠取得如此大的進步在於神經網路的層數增加。但對模型並不是把別人已經做好的模型在自己的機子上跑一下,或者簡單堆疊就可以了,而是要有自己的想法產生自己的改進模型。

keras提供了自定義層的程式設計正規化,但是很多書都沒有介紹,可能是一般的應用用不到。另一方面效果不一定好,需要有一定的理**底才能設計新的模型。手頭剛好需要設計乙個自定義層模型,現將方法記錄如下。

程式設計正規化

下面展示一些 `內聯**片`。

# 自定義層

#自定義層繼承自keras.engine.topology的layer類

#自定義layer中需要定義至少三個函式__init__、build、call、如果返回形狀發生了改變需要定義compute_output_shape層

class

mylayer

(layer)

:#__init__定義了需要初始化的引數

def__init__

(self, activation =

none

,**kwargs)

: self.activation = activation

super

(interactivate, self)

.__init__(

**kwargs)

#build函式定義了權重等值

defbuild

(self, input_shape)

: self.shape = input_shape

self.w = self.add_weight(name =

"w",shape =

(input_shape[0]

, input_shape[1]

), initializer=

"normal"

,trainable=

true

)super

(interactivate, self)

.build(input_shape)

#call函式定義了具體的計算過程,x為輸入值(一般為上一層計算結果)

defcall

(self, x)

: front_tanh = k.tanh(x)

return front_tanh

#注意:如果輸出形狀不變,則不需要;如果輸出的形狀發生改變,此處一定要標明

defcompute_output_shape

(self, input_shape)

:return

(input_shape[0]

,165

,165

)

注意

1、在主函式中盡量不要用keras.backend的各種操作,而應該將其封裝為層;

2、輸入一般都是單一輸入,我暫時還不知道如何讀取多個輸入。

3、一定要注意各層的輸入及輸出形狀,否則無法執行。

建議:

Keras 自定義層

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

keras自定義層

keras學習筆記 二 keras實現自定義層 例1,參考博文1中的自定義層attentiondecoder。def build self,input shape for model details that correspond to the matrices here.self.batch si...

神經網路 keras中的層

core highway層 highway層建立全連線的highway網路,這是lstm在前饋神經網路中的推廣 convolution separableconvolution2d層 該層是對2d輸入的可分離卷積。可分離卷積首先按深度方向進行卷積 對每個輸入通道分別卷積 然後逐點進行卷積,將上一步的...