Python 克拉斯。正在初始化双向LSTM。传递词嵌入

Python 克拉斯。正在初始化双向LSTM。传递词嵌入,python,keras,lstm,embedding,Python,Keras,Lstm,Embedding,在我使用的实现中,lstm以以下方式初始化: l_lstm = Bidirectional(LSTM(64, return_sequences=True))(embedded_sequences) 我不太明白的是,可能是因为缺乏Python方面的经验:符号l_lstm=bidirective(lstm(…)(嵌入式_序列)。 我没有得到我要传递的嵌入式\u序列到的内容?因为它不是LSTM()的参数,但似乎也不是Bidirectional()的参数,因为它单独存在 以下是双向的文档: def

在我使用的实现中,lstm以以下方式初始化:

l_lstm = Bidirectional(LSTM(64, return_sequences=True))(embedded_sequences)
我不太明白的是,可能是因为缺乏Python方面的经验:符号
l_lstm=bidirective(lstm(…)(嵌入式_序列)
。 我没有得到我要传递的
嵌入式\u序列
到的内容?因为它不是
LSTM()
的参数,但似乎也不是
Bidirectional()
的参数,因为它单独存在

以下是双向的文档:

  def __init__(self, layer, merge_mode='concat', weights=None, **kwargs):
        if merge_mode not in ['sum', 'mul', 'ave', 'concat', None]:
            raise ValueError('Invalid merge mode. '
                             'Merge mode should be one of '
                             '{"sum", "mul", "ave", "concat", None}')
        self.forward_layer = copy.copy(layer)
        config = layer.get_config()
        config['go_backwards'] = not config['go_backwards']
        self.backward_layer = layer.__class__.from_config(config)
        self.forward_layer.name = 'forward_' + self.forward_layer.name
        self.backward_layer.name = 'backward_' + self.backward_layer.name
        self.merge_mode = merge_mode
        if weights:
            nw = len(weights)
            self.forward_layer.initial_weights = weights[:nw // 2]
            self.backward_layer.initial_weights = weights[nw // 2:]
        self.stateful = layer.stateful
        self.return_sequences = layer.return_sequences
        self.return_state = layer.return_state
        self.supports_masking = True
        self._trainable = True
        super(Bidirectional, self).__init__(layer, **kwargs)
        self.input_spec = layer.input_spec
        self._num_constants = None

让我们试着分析一下正在发生的事情:

  • 从创建LSTM层的
    LSTM(…)
    开始。这意味着你可以像函数一样使用它们。例如
    lstm=lstm(…)
    然后
    lstm(一些输入)
    将调用给定输入张量上的lstm
  • 双向(…)
    包装任何RNN层,并返回另一个层,调用该层时将在两个方向上应用包装层。因此
    l_lstm=Bidirectional(lstm(…)
    是一个层,当使用一些输入调用时,它将在两个方向上应用
    lstm
    。注意:双向创建传递的LSTM层的副本,因此向后和向前是不同的LSTM
  • 最后,当您调用
    双向(LSTM(…)(嵌入式)时,
    双向层获取输入序列,在两个方向上将其传递给包装的LSTM,收集其输出并将其连接

  • 要了解有关层及其可调用性质的更多信息,您可以查看文档的详细信息。

    让我们试着分析一下发生了什么:

  • 从创建LSTM层的
    LSTM(…)
    开始。这意味着你可以像函数一样使用它们。例如
    lstm=lstm(…)
    然后
    lstm(一些输入)
    将调用给定输入张量上的lstm
  • 双向(…)
    包装任何RNN层,并返回另一个层,调用该层时将在两个方向上应用包装层。因此
    l_lstm=Bidirectional(lstm(…)
    是一个层,当使用一些输入调用时,它将在两个方向上应用
    lstm
    。注意:双向创建传递的LSTM层的副本,因此向后和向前是不同的LSTM
  • 最后,当您调用
    双向(LSTM(…)(嵌入式)时,
    双向层获取输入序列,在两个方向上将其传递给包装的LSTM,收集其输出并将其连接
  • 要了解有关层及其可调用性质的更多信息,可以查看文档的