代码之家  ›  专栏  ›  技术社区  ›  OOD Waterball

LSTM对一批状态做什么?第一批的第二个元素是否从第一个元素的第一个元素继承状态?

  •  1
  • OOD Waterball  · 技术社区  · 7 年前

    问题背景:

    我在和凯拉斯·LSTM做情绪分析, 因此,传递给lstm层的输入数据的形状应该是 (采样数、时间步数、特征大小)

    如果每个示例都是一个句子,则每个时间步骤都包含该句子的一个术语。


    主要问题:

    最令人困惑的是LSTM的状态管理, 我已经知道默认情况下,每个批次的状态都会被重置。 我不使用 stateful 也。

    所以我的问题是 LSTM如何处理批处理中的状态?

    例如,如果我将批处理设置为大小32。 这就意味着在一批样本中,将有32个句子同时进行训练。 这和国家有什么关系?

    第二 第一批继承状态的元素 第一 第一个元素的元素?

    如果是,我的批大小应该设置为1,因为所有句子情感分析都应该是独立的。

    谢谢!

    1 回复  |  直到 7 年前
        1
  •  1
  •   nuric    7 年前

    你错过了一个实现技巧,在 backend code 输入张量 (batch, timesteps, ...) 被调到时间少校 (timesteps, batch, ...) 然后,RNN在时间段内成批循环,从TensorFlow后端提取:

    # Transpose to time-major, i.e.
    # from (batch, time, ...) to (time, batch, ...)
    axes = [1, 0] + list(range(2, ndim))
    inputs = tf.transpose(inputs, (axes))
    

    所以一批中的每个序列都是从 initial_states 如果你没有 stateful=True 通过调用设置 .get_initial_state(inputs) 基地里 RNN class . 为了回答您的问题,由于换位,批处理中的每个序列都将独立处理。