【发布时间】:2017-05-28 17:56:52
【问题描述】:
我目前正在研究Keras tutorial for recurrent network training,但我无法理解有状态的 LSTM 概念。为了使事情尽可能简单,序列具有相同的长度seq_length。据我所知,输入数据的形状为(n_samples, seq_length, n_features),然后我们在n_samples/M 大小为M 的批次上训练我们的LSTM,如下所示:
对于每个批次:
- 输入二维张量
(seq_length, n_features)并为每个输入二维张量计算梯度 - 将这些梯度相加得到批次的总梯度
- 反向传播梯度并更新权重
在本教程的示例中,输入二维张量是输入大小为 seq_length 的字母序列,这些字母编码为长度为 n_features 的向量。但是,教程说在 LSTM 的 Keras 实现中,隐藏状态不会在输入整个序列(2D 张量)后重置,而是在输入一批序列以使用更多上下文后重置。
为什么保留前一个序列的隐藏状态并将其用作我们当前序列的初始隐藏状态会改善我们测试集的学习和预测,因为“以前学习的”初始隐藏状态在以下情况下将不可用做出预测?此外,Keras 的默认行为是在每个 epoch 开始时打乱输入样本,以便在每个 epoch 更改批处理上下文。这种行为似乎与通过批处理保持隐藏状态相矛盾,因为批处理上下文是随机的。
【问题讨论】:
标签: keras lstm recurrent-neural-network stateful