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

时间:2017-03-08 16:27:51

标签: neural-network keras lstm

我目前正在尝试使用Keras实现的LSTM进行时间序列预测。

我尝试训练LSTM模型,列车中有10 000个样本,测试中有2 500个样本。我使用的批量大小为30。

现在,我正在尝试训练完全相同的模型,但训练更多数据。我有一辆载有10万个样品的火车,并测试了25000个样品。

使用大数据集时,一个纪元的时间乘以100。

即使我有更多数据,批量大小也相同,因此培训不应花费更多时间。是否有可能计算出列车上的损失和需要花费大量时间的测试数据(这里使用了所有数据)?

关于批量大小:我应该把它放得更高,因为我有更多的数据?

编辑1

我尝试更改批量大小并放入更大的批量大小。当我这样做时,训练时间减少了很多。 批量大的情况下,梯度的计算应该比批量小的计算长?

我在这里不知道,我真的不明白为什么会这样。

有人知道为什么会这样吗?它与我使用的数据有关吗?理论上如何发生这种情况?

编辑2

我的处理器是Intel Xeon W3520(4颗心/ 8线程),配备32G RAM。 数据由长度为6的序列组成,具有4个特征。我使用一个具有50个单位的LSMT层和一个密集的输出层。无论我是训练10 000个样本还是100 000个样本,实际上批量大小的大小都会改变计算时间。对于批量大小= 1000的一个纪元,我可以从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]

1 个答案:

答案 0 :(得分:1)

您似乎对SGD(随机梯度下降)的工作方式有误解。 I explained parts of this answer in another post here on Stackoverflow,这可能会帮助您更好地理解这一点,但是在这里我将花一些时间再解释一下。

“梯度下降”的基本思想是计算所有训练样本的前向通过(并存储激活),然后更新一次权重。现在,由于您可能没有足够的内存来存储所有激活(计算反向传播梯度所需的激活),并且由于其他原因(mainly convergence),您通常无法进行经典梯度下降。

随机梯度下降假设,通过以随机顺序进行采样,您可以一次查看一个训练样本,然后在之后直接更新,从而达到收敛。强>。这称为迭代,而我们将通过所有训练样本的传递称为时期
现在,小批量只能通过以下方式更改SGD-而不是使用一个样本-取“少量”值,该值由批量大小决定。

现在,权重的更新是一个相当昂贵的过程,并且在这一点上应该清楚的是,大量的权重更新(使用SGD)比计算梯度和仅更新几次更昂贵(批量较大)。

相关问题