我正在构建一个逐步生成符号的LSTM模型。任务是将模型训练到数据序列的某个点,然后使用训练的模型在测试阶段处理序列的剩余部分 - 在训练期间没有看到这些剩余部分。
对于这项任务,我试图重新使用训练阶段的最新状态进行后续预测阶段(即不开始使用干净的零状态进行预测,而是在事情停止期间继续进行排序。培训)。
在这种情况下,我想知道如何最好地选择批量大小进行培训。
我的训练数据是一系列按时间顺序排列的观察。如果将该序列切割成N个批次用于训练,那么我的理解是状态张量在训练期间将是[N, Network_Size]
形状,在预测期间将是[1, Network_Size]
。因此,对于预测,我只需取[N, Network_Size]
张量的最后一个元素,其形状为[1, Network_Size]
。
这似乎在力学方面起作用,但这意味着N
的值决定了训练期间原始状态的最后一个向量的观察数量。
是否有确定如何选择N的最佳做法?网络训练速度更快,批量更大,但我担心这种方式可能是国家张量的最后一部分还不够。显然我正在尝试各种组合,但很好奇别人如何处理它。
另外,我已经看到一些例子,其中像这样的参数(或Cell size /等)被设置为2的幂(即64,128等)。与简单的50/100 /等相比,是否有任何理论上的原因?或者只是一个古怪的选择?
答案 0 :(得分:1)
首先,对于你的最后一个问题:对于计算机来说,2的幂比10的幂更简单(例如,内存大小和对齐约束,更有可能是2的幂)。
您的问题不清楚您的训练意味着什么;如果更新参数或仅计算RNN前进步骤。更新参数没有多大意义,因为对于RNN(包括LSTM),您只有在看到整批序列后才能理想地更新参数(并且在模型完全合理之前,您经常需要进行许多更新)。同样,RNN前向步骤对我来说没有多大意义,因为每个示例的状态与批量大小无关(忽略您可能正在进行的任何批量规范化)。