问题的背景:
我正在用keras LSTM进行情绪分析, 所以我的输入数据的形状应该传递给LSTM层 (样本数,时间步数,特征大小数)
每个样本都是一个句子,每个时间步都包含一个句子的术语。
主要问题:
最令人困惑的是LSTM的国家管理,
我已经知道状态将默认重置每个批次。
我也没有使用stateful
。
所以我的问题是 LSTM对批处理中的状态做了什么?
例如,如果我将批次设置为32。 那就意味着一批中将同时训练32个样本的句子。 这对国家有什么影响?
第一批的第二元素是否从第一个元素的第一个元素继承状态?
如果是这样,我的batch_size应设置为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}}。为了回答您的问题,批次中的每个序列都会因转置而独立处理。