Bidirectional classkeras.layers.Bidirectional(
layer, merge_mode="concat", weights=None, backward_layer=None, **kwargs
)
双向包装器用于RNNs.
参数:
layer: keras.layers.RNN 实例,例如
keras.layers.LSTM 或 keras.layers.GRU.
它也可以是符合以下条件的 keras.layers.Layer 实例:
1. 是一个序列处理层(接受3D+输入).
2. 具有 go_backwards、return_sequences 和 return_state 属性(与 RNN 类的语义相同).
3. 具有 input_spec 属性.
4. 通过 get_config() 和 from_config() 实现序列化.
注意,创建新RNN层的推荐方法是编写自定义RNN单元并将其与 keras.layers.RNN 一起使用,而不是直接子类化 keras.layers.Layer.
当 return_sequences 为 True 时,掩码时间步的输出将为零,而不管层的原始 zero_output_for_mask 值如何.
merge_mode: 前向和后向RNN的输出将结合的模式.可以是 {"sum", "mul", "concat", "ave", None} 之一.
如果为 None,输出将不会结合,它们将作为列表返回.默认为 "concat".
backward_layer: 可选的 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')
# 使用自定义后向层
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')