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

时间:2018-06-17 10:46:10

标签: python tensorflow keras lstm

问题的背景:

我正在用keras LSTM进行情绪分析, 所以我的输入数据的形状应该传递给LSTM层 (样本数,时间步数,特征大小数)

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

主要问题:

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

所以我的问题是 LSTM对批处理中的状态做了什么?

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

  

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

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

非常感谢!

1 个答案:

答案 0 :(得分:1)

你错过了一个实现技巧,在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,则通过调用基础RNN class中的.get_initial_state(inputs)来设置{{1}}。为了回答您的问题,批次中的每个序列都会因转置而独立处理。