在训练和测试期间在LSTM中重置状态

时间:2017-01-23 02:39:09

标签: tensorflow deep-learning lstm recurrent-neural-network

我正在尝试理解和实施LSTM。我知道他们需要定义序列长度T,并且训练是分批进行的。所以我们向网络提供了几个长度为T的序列。现在LSTM需要一个先前的状态作为输入,据我所知,它被初始化为零。我的问题是,每个序列后状态是否重置为零?例如,我有一个序列1,状态向量按此顺序前进,然后我把它归零以用于下一个序列?或者将它带到下一个序列2?如果是这样,如何对不相关的序列进行处理;例如,我有来自2个不同文本的样本,将状态从文本1传递到文本2是没有意义的;这在实践中是如何处理的? 关于测试时间,状态向量初始化为零并在整个序列中进行,或者在每个子序列后重置?

注意:我将标签也放在Tensorflow中,因为我正在使用的框架,也许那里的人也可以帮助我。

2 个答案:

答案 0 :(得分:0)

在Tensorflow中,我95%确定每个序列的起始状态对于批次中和批次之间的每个元素都重置为零。 (5%,因为“永不言败”的规则:)

编辑:

我应该详细说明一下。 Tensorflow如何工作,它首先构建一个图形,然后推送您的数据。当你看到你构建的循环图时,我相信你会看到它的头(第一个状态)连接到零,这意味着每次你通过图形推送数据时(例如通过sess.run()),它将从零生成器获得一个新的零,因此如果忘记了以前运行的旧状态。

答案 1 :(得分:0)

这取决于您如何实施RNN的批处理。 从理论上讲,状态在处理一系列数据时非常重要,因此,如果整个数据序列没有完成,则不应重置状态。 因此,通常您需要在纪元结束时重置,并且只在一个批处理循环结束时不应重置。

相关问题