关于“了解Keras LSTM”的疑问

时间:2018-12-28 07:28:29

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

我是LSTM的新手,正在经历Understanding Keras LSTMs,并且对Daniel Moller的漂亮答案有一些愚蠢的疑问。

这是我的一些疑问:

  1. Achieving one to many节中指定了2种方式,其中我们可以使用stateful=True反复获取一个步骤的输出,并将其用作下一步的输入(需要output_features == input_features。

    One to many with repeat vector图中,重复的向量在所有时间步中都作为输入提供,而在One to many with stateful=True中,输出在下一个时间步中作为输入提供。因此,我们不是通过使用stateful=True来更改图层的工作方式吗?

    在构建 RNN 时,应遵循上述两种方法中的哪一种(使用重复矢量或将前一个时间步输出作为下一个输入)?

  2. One to many with stateful=True部分下,为了更改one to many的行为,在用于预测的手动循环代码中,我们如何知道steps_to_predict变量,因为我们不知道无法提前知道输出序列的长度。

    我也不了解整个模型使用last_step output生成next_step ouput的方式。我对model.predict()函数的工作感到困惑。我的意思是,不是model.predict()同时预测整个输出序列,而不是遍历要生成的no. of output sequences(我仍然不知道其值)并进行model.predict()预测给定迭代中的特定时间步输出?

  3. 我无法理解整个Many to many的情况。任何其他链接都将有所帮助。

  4. 我了解我们使用model.reset_states()来确保新批次独立于先前批次。但是,我们是否手动创建序列的批次,以便一个批次跟随另一个批次,或者Keras模式下的stateful=True会自动将序列划分为此类批次。

    如果是手动完成的,为什么有人将数据集划分为这样的批处理,即序列的一部分在一个批处理中而另一序列在下一个批处理中?

  5. 最后,将使用stateful=True的实际实现或示例/用例是什么(因为这似乎很不寻常)?我正在学习LSTM,这是我第一次在Keras中认识stateful

有人可以帮助我解释我的愚蠢问题,以便使我对在Keras中实施LSTM有所了解吗?

编辑:请其中一些人澄清当前答案,并提出一些剩余疑问

A 。因此,基本上有状态让我们keep OR reset每批处理后的内部状态。然后,如果在每次训练批次后继续不断地重置内部状态,该模型将如何学习?重置是否真的意味着要重置参数(用于计算隐藏状态)?

B 。在If stateful=False: automatically resets inner state, resets last output step行中。重置最后一个输出步骤是什么意思?我的意思是,如果每个时间步都产生自己的输出,那么重置最后一个输出步意味着什么,那也只有最后一个?

C 。针对Question 2Question 4的第二点,我仍然没有收到您的manipulate the batches between each iteration和对stateful的需求(({{1}的最后一行)仅重置状态)。我要指出的是,我们不知道某个时间步生成的每个输出的输入。

因此,您将序列分解为Question 2的序列,然后使用only one-step,但随后又如何知道需要一次又一次的操作(必须有一个停止点)为循环)?另外,请说明new_step = model.predict(last_step)部分(在stateful的最后一行)。

D 。在Question 2下的代码中,似乎for循环(手动循环)用于预测下一个单词仅用于测试时间。该模型是在火车时刻本身包含了该东西吗?还是我们One to many with stateful=True是否需要在火车时刻也使用此循环?

E 。假设我们正在做一些机器翻译工作,我认为在将整个输入(要翻译的语言)输入到输入时间步长然后生成输出(翻译的语言)之后,序列的破坏就会发生)将通过manually在每个时间步进行,因为现在我们得到了输入,并开始使用迭代在每个时间步产生输出。我说对了吗?

F 。由于LSTM的默认工作方式需要在答案中提到三点,因此在中断序列的情况下,manual loopcurrent_input被馈以相同的向量,因为在没有当前输入可用的情况下它们的值是一样吗?

G 。在预测:部分下的多对有状态=真的情况下,代码为:

previous_output

由于predicted = model.predict(totalSequences) firstNewStep = predicted[:,-1:] 的手动循环到目前为止尚未使用,我怎么知道finding the very next word in the current sequence所预测的时间步长中的count,所以预测(model.predict(totalSequences))的最后一步将随后用于生成其余序列?我的意思是,我怎么知道predicted[:,-1:]之前predicted = model.predict(totalSequences)中产生的序列数(后来使用)。

编辑2:

。在manual for loop答案中,我仍然不知道如何训练模型?我知道在训练过程中使用手动循环可能会很痛苦,但是如果我不使用它,那么在D的情况下如何训练模型?只需使用we want the 10 future steps, we cannot output them at once because we don't have the necessary 10 input steps就能解决我的问题吗?

II model.fit()个答案的最后一段,D

您能详细解释一下吗?

You could train step by step using train_on_batch only in the case you have the expected outputs of each step. But otherwise I think it's very complicated or impossible to train.是什么意思?如果我没有拥有后续序列的输出,这将如何影响我的训练?训练期间我是否仍需要手动循环。如果没有,那么step by step函数是否可以根据需要工作?

III 。我将model.fit()解释为使用"repeat" option。使用重复向量不适用于repeat vector情况,不适用于one to many情况,因为后者将有很多输入向量可供选择(用作单个重复向量) ?在many to many情况下,如何使用repeat vector

0 个答案:

没有答案