python - 喀拉斯。初始化双向 LSTM。传递词嵌入
问题描述
在我正在使用的实现中,lstm 以下列方式初始化:
l_lstm = Bidirectional(LSTM(64, return_sequences=True))(embedded_sequences)
我不太明白,这可能是因为缺乏 Python 经验:符号l_lstm= Bidirectional(LSTM(...))(embedded_sequences)
. 我不明白我要传递embedded_sequences
给什么?因为它不是一个参数,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 Layer开始。现在Keras 中的层是可调用的,这意味着您可以像函数一样使用它们。例如lstm = LSTM(...)
,然后lstm(some_input)
将在给定的输入张量上调用LSTM。 Bidirectional(...)
包裹任何 RNN 层并返回另一个层,当调用该层时,它会在两个方向上应用包裹层。因此l_lstm = Bidirectional(LSTM(...))
,当使用某些输入调用图层时,将LSTM
在两个方向上应用。注意:双向创建传递的 LSTM 层的副本,因此向后和向前是不同的 LSTM。- 最后,当您调用
Bidirectional(LSTM(...))(embedded_seqences)
双向层时,接收输入序列,将其传递给两个方向的包装 LSTM,收集它们的输出并将其连接起来。
要了解有关层及其可调用性质的更多信息,您可以查看文档的功能 API 指南。
推荐阅读
- python - 正则表达式:在前瞻断言的最后一次匹配之后查找文本,直到前瞻断言的第一次匹配
- reactjs - 链接状态打字稿错误:“状态:{ id:任意;名称:任意;};}' 不可分配给类型”
- reactjs - 存储语义 UI 下拉菜单的多个值
- sql - 在 Bigquery 中生成空数组结构
- ios - 绘制和合成 UIImage 时如何应用比例
- sql-server-2016 - SQL Server 索引和复合键
- javascript - 如何停止已经在调用堆栈中的异步循环?
- scheme - 方案/球拍中的汽车和 Cdr
- php - `getimagesize` 给出错误`文件名不能为空` PHP 8
- python - 将值附加到python中的字典