如何为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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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