在 Keras 中实例化 LSTM 时,如果我有一个可变长度的序列,我该怎么办?

人工智能 机器学习 循环神经网络 长短期记忆
2021-10-30 13:05:03

在keras中,当我们使用LSTM/RNN模型时,需要指定节点[即LSTM(128)]。我对它的实际工作方式有疑问。从 LSTM/RNN 展开图像或描述中,我发现每个 RNN 单元一次执行一个时间步。如果我的序列大于 128 怎么办?如何解释这个?谁能给我解释一下?预先感谢。

2个回答

在 Keras 中,您指定的是隐藏层大小。所以 :

LSTM(128)

给你一个 Keras 层,代表一个隐藏层大小为 128 的 LSTM。

如你所说 :

从 LSTM/RNN 展开图像或描述中,我发现每个 RNN 单元一次采取一个时间步长

因此,如果您将 RNN 描绘为一个时间步长,它将如下所示:

在此处输入图像描述

如果你及时展开它,它看起来像这样:

在此处输入图像描述

您的序列大小不受限制,这是 RNN 的特点之一:由于您逐个元素输入序列,因此序列的大小可以是可变的。

这个数字 128 仅代表 LSTM 隐藏层的大小。您可以将 LSTM 的隐藏层视为 RNN 的内存。

当然,LSTM 的目标并不是要记住序列的所有内容,而只是在元素之间进行链接。这就是隐藏层的大小可以小于序列大小的原因。

资料来源:

编辑

这个博客

网络越大,功能越强大,但也更容易过拟合。不想尝试从 10,000 个示例中学习一百万个参数 - 参数 > 示例 = 麻烦。

所以减少 LSTM 的隐藏状态大小的结果是它会更简单。可能无法获取序列元素之间的链接。但是如果你放一个太大的尺寸,你的网络就会过拟合!你绝对不希望那样。

另一个关于 LSTM 的非常好的博客:这个链接

尽管已经回答了这个问题,但我想对一般神经网络设计添加一些评论

如您所知,NN 具有三种类型的层:输入层、隐藏层和输出层。初始化此网络后,您可以在训练期间迭代调整配置。

为了优化网络配置,我们可以使用剪枝。

修剪描述了一组技术来修剪网络大小(通过节点而不是层)以提高计算性能,有时甚至是分辨率性能。这些技术的要点是在训练期间通过识别那些如果从网络中移除不会显着影响网络性能(即数据的分辨率)的节点来从网络中移除节点。(即使不使用正式的剪枝技术,您也可以通过在训练后查看权重矩阵来粗略了解哪些节点不重要;查看非常接近于零的权重——通常是这些权重两端的节点在修剪过程中删除。)

您可以在这里找到更多信息:https ://stats.stackexchange.com/questions/181/how-to-choose-the-number-of-hidden-layers-and-nodes-in-a-feedforward-neural-netw