Bidirectional 类tf_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。- 当 returns_sequences 为 True 时,被 mask 的时间步的输出将为零,而不管该层原始的 zero_output_for_mask 值如何。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 调用。
引发
layer 或 backward_layer 不是 Layer 实例。merge_mode 参数无效。backward_layer 的属性与 layer 不匹配。示例
model = Sequential()
model.add(Bidirectional(LSTM(10, return_sequences=True),
input_shape=(5, 10)))
model.add(Bidirectional(LSTM(10)))
model.add(Dense(5))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
# With custom backward layer
model = Sequential()
forward_layer = LSTM(10, return_sequences=True)
backward_layer = LSTM(10, activation='relu', return_sequences=True,
go_backwards=True)
model.add(Bidirectional(forward_layer, backward_layer=backward_layer,
input_shape=(5, 10)))
model.add(Dense(5))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')