基于数据集大小的LSTM Keras训练时间

3
我目前正在使用Keras实现的LSTM进行时间序列预测。 我尝试用10,000个样本在训练集和2,500个样本在测试集中训练LSTM模型。我使用的批量大小为30。 现在,我想训练“完全相同”的模型,但是“使用更多数据”。我有一个包含100,000个样本的训练集和包含25,000个样本的测试集。当使用大数据集时,一个时期所需的时间增加了100倍。即使我拥有更多的数据,批量大小仍然相同,因此训练不应该需要更多时间。 是否可能是训练和测试数据上的损失计算需要很长时间(这里使用所有数据)? 关于批量大小:我是否应该将其设置得更高,因为我有更多的数据? 我尝试改变批量大小并将其设置得更大。 当我那样做时,训练时间大大缩短。 使用大的批处理大小,梯度的计算应该比小的批处理大小要长吗? 对于这一点,我一无所知,我真的不明白为什么会发生这种情况。 有人知道为什么会发生这种情况吗? 它与我使用的数据有关吗?从理论上讲,这种情况如何发生? 我的处理器是Intel Xeon W3520(4个核心/8个线程),内存为32G。 数据由长度为6且具有4个特征的序列组成。我使用一个带有50个单元和一个稠密输出层的LSMT层。无论我使用10,000个样本还是100,000个样本进行训练,都可以通过更改批量大小来改变计算时间。我的计算时间可以从批量大小= 1000的1个时期2秒减少到批量大小= 30的200秒。 我没有使用生成器,我使用基本代码行model.fit(Xtrain,Ytrain,nb_epoch,batch_size,verbose = 2,callbacks,validation_data =(Xtest,Ytest))。其中callbacks = [EarlyStopping(monitor ='val_loss',patience = 10,verbose = 2),history]

瓶颈可能是将批处理数据提供给计算单元... IO 可能成为神经网络中的瓶颈,因此更大的批处理大小意味着您可以提供更多的数据,计算需要足够的时间来提供下一批数据,从而变得更加优化。 - Nassim Ben
您能提供一下您用于计算的设备信息吗?此外,数据的大小可能也很有用(特征数量等)。 - Marcin Możejko
你还能提供关于如何输入这些数据的信息吗?是在内存中输入还是通过生成器读取? - Nassim Ben
谢谢大家的回答!我已经根据你们提出的要求编辑了我的问题。我会按照你们给我的方向进行研究。 - BenDes
1个回答

1

你似乎误解了随机梯度下降(SGD)的部分工作原理。 我在Stackoverflow上的另一篇帖子中解释了这个问题,这可能有助于你更好地理解它,但我会在这里花时间再解释一遍。

梯度下降的基本思想是计算所有训练样本的前向传递(并存储激活),然后更新您的权重一次。现在,由于您可能没有足够的内存来存储所有激活(您需要用它来计算反向传播梯度),以及其他原因(主要是收敛),您通常不能进行经典的梯度下降。

随机梯度下降法假设,通过随机采样,您可以通过一次只查看一个训练样本并在之后直接更新来达到收敛。这被称为迭代,而我们将通过所有训练样本的传递称为时期
现在,小批量仅通过-而不是使用单个样本-取出由批量大小确定的“一把”值来更改SGD。

现在,权重的更新是一个相当昂贵的过程,此时应清楚地表明,使用SGD多次更新权重比计算梯度并仅更新几次(使用大批量大小)更加昂贵。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接