首页 文章

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

提问于
浏览
1

问题的背景:

我正在使用keras LSTM进行情绪分析,因此传递给LSTM层的输入数据的形状应该是(样本数,时间步数,特征数量的数量)

每个样本都是一个句子,每个时间步骤包含一个句子的术语 .


主要问题:

最令人困惑的是LSTM的状态管理,我已经知道状态将默认重置每个批次 . 我也没有使用 stateful .

所以我的问题是 What does LSTM do with the states within a batch?

例如,如果我将批次设置为大小32.那么这意味着将在一批中同时训练32个样本句子 . 这对国家有什么影响?

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

如果是这样,我的batch_size应设置为1,因为所有句子情绪分析都应该是独立的 .

非常感谢!

1 回答

  • 1

    你错过了一个实现技巧,在backend code输入张量 (batch, timesteps, ...) 被转换为time-major (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 ,则通过在RNN class中调用 .get_initial_state(inputs) 来设置 . 为了回答您的问题,批次中的每个序列都会因转置而独立处理 .

相关问题