如何为Keras中的双向LSTM配置输入形状

我遇到了以下问题。我有一大批文档,想要使用双向LSTM对其进行编码。每个文档的单词数量不同,每个单词可以被视为一个时间步长。

在配置双向LSTM时,我们需要提供时间序列的长度。当我训练模型时,每个批次的这个值都会有所不同。我应该为timeseries_size选择一个数字,这个数字是我允许的最大文档大小吗?超过这个大小的文档将不会被编码吗?

示例配置:

Bidirectional(LSTM(128, return_sequences=True), input_shape=(timeseries_size, encoding_size))

回答:

这是一个众所周知的问题,涉及到普通和双向RNN。GitHub上的这个讨论可能会帮助你。本质上,以下是最常见的选项:

  • 一个简单的解决方案是将timeseries_size设置为训练集中的最大长度,并用零填充较短的序列。Keras示例代码。一个明显的缺点是,如果训练集中既有非常长的输入又有非常短的输入,就会浪费内存。

  • 将输入样本按长度分成不同的桶,例如,一个桶用于length <= 16,另一个桶用于length <= 32,依此类推。这基本上意味着为不同句子集训练几个独立的LSTM。这种方法(称为分桶)需要更多的努力,但目前被认为是最有效的,并且实际上在最先进的翻译引擎Tensorflow Neural Machine Translation中使用。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注