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')