Bidirectional
類別keras.layers.Bidirectional(
layer, merge_mode="concat", weights=None, backward_layer=None, **kwargs
)
用於 RNN 的雙向包裝器。
參數
keras.layers.RNN
實例,例如 keras.layers.LSTM
或 keras.layers.GRU
。它也可以是一個 keras.layers.Layer
實例,該實例符合以下條件:go_backwards
、return_sequences
和 return_state
屬性 (具有與 RNN
類別相同的語義)。input_spec
屬性。get_config()
和 from_config()
實作序列化。請注意,建立新 RNN 層的建議方法是編寫自訂 RNN cell 並將其與 keras.layers.RNN
一起使用,而不是直接子類化 keras.layers.Layer
。當 return_sequences
為 True
時,無論層原始的 zero_output_for_mask
值為何,遮罩時間步長的輸出都將為零。{"sum", "mul", "concat", "ave", None}
其中之一。如果為 None
,則不會組合輸出,它們將作為列表回傳。預設為 "concat"
。keras.layers.RNN
或 keras.layers.Layer
實例,用於處理後向輸入處理。如果未提供 backward_layer
,則會使用作為 layer
參數傳遞的層實例來自動產生後向層。請注意,提供的 backward_layer
層應具有與 layer
參數匹配的屬性,特別是它應具有相同的 stateful
、return_states
、return_sequences
等值。此外,backward_layer
和 layer
應具有不同的 go_backwards
參數值。如果不符合這些要求,將會引發 ValueError
。呼叫參數
此層的呼叫參數與包裝的 RNN 層的呼叫參數相同。請注意,在此層的呼叫期間傳遞 initial_state
參數時,initial_state
列表中前半部的元素將傳遞給前向 RNN 呼叫,而列表中後半部的元素將傳遞給後向 RNN 呼叫。
注意:從現有的 RNN 層實例實例化 Bidirectional
層不會重複使用 RNN 層實例的權重狀態 – Bidirectional
層將具有全新初始化的權重。
範例
model = Sequential([
Input(shape=(5, 10)),
Bidirectional(LSTM(10, return_sequences=True),
Bidirectional(LSTM(10)),
Dense(5, activation="softmax"),
])
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
# With custom backward layer
forward_layer = LSTM(10, return_sequences=True)
backward_layer = LSTM(10, activation='relu', return_sequences=True,
go_backwards=True)
model = Sequential([
Input(shape=(5, 10)),
Bidirectional(forward_layer, backward_layer=backward_layer),
Dense(5, activation="softmax"),
])
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')