Keras 2 API 文档 / 层 API / 循环层 / 双向层

双向层

[源代码]

Bidirectional

tf_keras.layers.Bidirectional(
    layer, merge_mode="concat", weights=None, backward_layer=None, **kwargs
)

RNN 的双向包装器。

参数

  • layer: keras.layers.RNN 实例,例如 keras.layers.LSTMkeras.layers.GRU。它也可以是满足以下条件的 keras.layers.Layer 实例
    1. 是一个序列处理层(接受 3D+ 输入)。
    2. 具有 go_backwardsreturn_sequencesreturn_state 属性(与 RNN 类的语义相同)。
    3. 具有 input_spec 属性。
    4. 通过 get_config()from_config() 实现序列化。请注意,创建新的 RNN 层的推荐方法是编写一个自定义的 RNN 单元并将其与 keras.layers.RNN 一起使用,而不是直接子类化 keras.layers.Layer。- 当 returns_sequences 为真时,无论层的原始 zero_output_for_mask 值如何,掩码时间步长的输出都将为零。
  • merge_mode: 前向和后向 RNN 输出将如何组合的方式。可选值之一为 {'sum', 'mul', 'concat', 'ave', None}。如果为 None,则不会组合输出,它们将作为列表返回。默认值为 'concat'。
  • backward_layer: 可选的 keras.layers.RNNkeras.layers.Layer 实例,用于处理反向输入处理。如果未提供 backward_layer,则将传递给 layer 参数的层实例将用于自动生成反向层。请注意,提供的 backward_layer 层应具有与 layer 参数匹配的属性,特别是它应该具有 statefulreturn_statesreturn_sequences 等相同的值。此外,backward_layerlayer 应具有不同的 go_backwards 参数值。如果未满足这些要求,则会引发 ValueError

调用参数

此层的调用参数与包装的 RNN 层的调用参数相同。请注意,在调用此层时传递 initial_state 参数时,initial_state 列表中元素列表的前半部分将传递给前向 RNN 调用,后半部分将传递给后向 RNN 调用。

引发异常

  • ValueError:
    1. 如果 layerbackward_layer 不是 Layer 实例。
    2. 如果 merge_mode 参数无效。
    3. 如果 backward_layerlayer 具有不匹配的属性。

示例

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