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 單元,並搭配 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')