Tensorflow LSTM批大小和序列长度如何影响内存

Tensorflow LSTM批大小和序列长度如何影响内存,tensorflow,machine-learning,lstm,rnn,Tensorflow,Machine Learning,Lstm,Rnn,我有一个关于批量大小和序列长度的问题。假设我有10个不同的独立时间序列,每个长度为100 5个是一个人在做一项活动,另外5个是一个人在做另一项活动 我想创建一个LSTM,它能够记住每个序列中第一个样本的所有序列,并对输入到一个活动或另一个活动中的测试样本进行分类 现在,第一次尝试,假设我可以输入长度为100的测试样本。我该怎么做?我会创建一个LSTM,然后一次性输入[10100,1]形状的数据吗?或者我会把这个形状的数据[1100,1]输入10次吗?这里的问题是,批处理是否会影响LSTM如何记忆

我有一个关于批量大小和序列长度的问题。假设我有10个不同的独立时间序列,每个长度为100

5个是一个人在做一项活动,另外5个是一个人在做另一项活动

我想创建一个LSTM,它能够记住每个序列中第一个样本的所有序列,并对输入到一个活动或另一个活动中的测试样本进行分类

现在,第一次尝试,假设我可以输入长度为100的测试样本。我该怎么做?我会创建一个LSTM,然后一次性输入[10100,1]形状的数据吗?或者我会把这个形状的数据[1100,1]输入10次吗?这里的问题是,批处理是否会影响LSTM如何记忆过去的输入?我不希望LSTM在独立序列之间记住,但我希望它从每个时间序列的开始就一直记住


第二,假设我现在想把我用来训练LSTM的序列分块。目标与以前一样。现在我把序列分为10块。对于每个序列,我是否以[10,10,1]的形式输入它?如果我这样做,LSTM会从一开始就记住序列的时间动态吗?以这种方式进行LSTM是否类似于不将序列分块并完整输入?

我可以回答你问题中与批处理有关的部分。批处理有两个原因

  • 计算机分批进行矩阵乘法更有效。如果您是在CPU上执行此操作,那么部分效率来自于能够缓存矩阵,而不必从内存中重新加载矩阵。在评估过程中,批次中的序列不会相互干扰。这与单独计算每个值相同
  • 在训练期间,在一批中具有多个序列可以减少梯度中的噪声。权重更新是通过平均批次中所有序列的梯度来计算的。拥有更多的序列可以更可靠地估计参数的移动方向,从而改善损失函数

  • 实际上,使用更大的批量是非常困难的!这是一个很大的误解。使用大型迷你批处理的主要原因是,批处理后只需更新一次,而不是针对每个样本,这节省了一些计算时间。此外,SGD的整个要点是使用样本中的“噪声”,以允许更大范围的可能解决方案。此外,批处理的主要计算优势仅在GPU上处理时可见,在GPU上,您必须在每次重量更新后进行复制。