关于“理解Keras LSTM”的疑问`

关于“理解Keras LSTM”的疑问`,keras,deep-learning,lstm,recurrent-neural-network,Keras,Deep Learning,Lstm,Recurrent Neural Network,我是LSTMs的新手,正在经历一个复杂的过程,对作者的一个漂亮的答案产生了一些愚蠢的怀疑 以下是我的一些疑问: 在实现一对多一节中指定了两种方法,我们可以使用stateful=True重复获取一个步骤的输出,并将其作为下一个步骤的输入(需要输出功能==输入功能) 在一对多重复向量图中,重复向量在所有时间步中作为输入馈送,而在一对多有状态=真的中,输出在下一时间步作为输入馈送。那么,我们不是通过使用stateful=True来改变层的工作方式吗 在构建RNN时,应遵循上述两种方法中的哪一种(使用重

我是LSTMs的新手,正在经历一个复杂的过程,对作者的一个漂亮的答案产生了一些愚蠢的怀疑

以下是我的一些疑问:

  • 实现一对多
    一节中指定了两种方法,我们可以使用
    stateful=True
    重复获取一个步骤的输出,并将其作为下一个步骤的输入(需要输出功能==输入功能)

    一对多重复向量图中,重复向量在所有时间步中作为输入馈送,而在
    一对多有状态=真的
    中,输出在下一时间步作为输入馈送。那么,我们不是通过使用
    stateful=True
    来改变层的工作方式吗

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

  • One-to-many with stateful=True
    部分下,要更改
    One-to-many
    的行为,在预测的手动循环代码中,我们如何知道
    steps\u to\u predict
    变量,因为我们事先不知道输出序列长度

    我也不理解整个模型使用
    最后一步输出
    生成
    下一步输出的方式。它让我对
    model.predict()
    函数的工作感到困惑。我的意思是,不是
    model.predict()
    一次同时预测整个输出序列,而不是遍历要生成的
    输出序列数(其值我仍然不知道),然后执行
    model.predict()
    来预测给定迭代中的特定时间步输出

  • 我无法理解整个
    多对多
    案例。任何其他链接都会有帮助

  • 我知道我们使用
    model.reset_states()
    来确保新批次独立于前一批次。但是,我们是手动创建序列批次,使一个批次跟随另一个批次,还是在
    stateful=True
    模式下将序列自动划分为这样的批次

    如果是手动完成的,为什么会有人将数据集分成这样的批次,其中一部分序列在一个批次中,另一部分在下一个批次中

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

  • 有谁能帮我解释我的愚蠢问题,这样我就可以清楚地了解Keras中的LSTM实现了吗

    编辑:要求其中一些人澄清当前答案,另一些人澄清剩余疑问

    A。因此,基本上,stateful让我们
    在每个批处理后保持或重置
    内部状态。那么,如果我们在每批训练后不断地重置内部状态,模型将如何学习?重置是否真的意味着重置参数(用于计算隐藏状态)

    B。在
    行中,如果stateful=False:自动重置内部状态,重置最后一个输出步骤
    。重置最后一个输出步骤是什么意思?我的意思是,如果每一步都产生自己的输出,那么重置最后一步的输出意味着什么,而这也只是最后一步

    C。在回答
    问题2
    问题4
    的第2点时,我仍然没有让您的
    在每次迭代之间操作批处理
    ,并且需要
    有状态的
    问题2
    的最后一行),它只重置状态)。我的观点是,我们不知道在一个时间步长中生成的每个输出的输入

    因此,您将序列分解为只包含一个步骤的序列,然后使用
    new\u step=model.predict(last\u step)
    ,但是您如何知道需要重复多长时间(循环必须有一个停止点)?另外,一定要解释有状态的部分(在问题2的最后一行)

    D。在
    一对多且stateful=True
    下的代码中,似乎for循环(手动循环)用于预测下一个单词仅在测试时使用。该模型是否在列车运行时包含该内容,或者我们是否需要在列车运行时手动使用该循环

    E。假设我们正在做一些机器翻译工作,我认为在将整个输入(要翻译的语言)输入到输入时间步,然后生成输出(翻译的语言)之后,会发生序列中断每个时间步都将通过
    手动循环进行,因为现在我们以输入结束,并开始使用迭代在每个时间步生成输出。我做对了吗

    F。由于LSTM的默认工作需要回答中提到的3件事情,因此在序列中断的情况下,
    当前输入
    以前的输出
    是否以相同的向量馈送,因为在没有可用的当前输入的情况下,它们的值是相同的

    G。在“预测:部分”的“有状态=True的多对多”下,代码如下:

    predicted = model.predict(totalSequences)
    firstNewStep = predicted[:,-1:]
    
    由于到目前为止,
    在当前序列中查找下一个单词的手动循环还没有使用,我如何知道
    模型预测的时间步的
    计数
    。predict(totalSequences)
    ,以便预测的最后一步(
    predicted[:,-1::
    )随后将用于生成