【问题标题】:Training Time LSTM Keras depending on the size of dataset训练时间 LSTM Keras 取决于数据集的大小
【发布时间】:2017-07-29 08:06:08
【问题描述】:

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

我尝试用训练中的 10000 个样本和测试中的 2500 个样本来训练 LSTM 模型。我使用的批量大小为 30。

现在,我正在尝试训练 完全相同的模型,但使用更多数据。我有一列有 100 000 个样本的火车并用 25 000 个样本进行测试。

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

即使我有更多数据,批量大小也是相同的,因此训练不应该花费更多时间。有没有可能这是对train和test数据的loss的计算,需要花费很多时间(这里所有的数据都用到了)?

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

编辑 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] 的基本代码行

【问题讨论】:

  • 瓶颈可能是将批处理数据提供给计算单元... IO 可能是神经网络中的瓶颈,因此更大的批处理大小意味着您提供更多数据,计算需要足够的时间来提供下一批,所以它变得最优。
  • 您能否向我们提供有关您用于计算的设备的信息?数据的大小也可能对我有用(特征数量等)
  • 您能否提供有关您提供此数据的方式的信息?在内存中还是用生成器读取?
  • 感谢大家的回答!我用您询问的信息编辑了我的问题。我会按照你给我的方向去研究。

标签: neural-network keras lstm


【解决方案1】:

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

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

随机梯度下降假设,通过以随机顺序进行采样,您可以通过一次只查看一个训练样本,然后在之后直接更新来达到收敛。强>。这称为迭代,而我们将遍历所有训练样本称为 epoch
小批量现在仅通过(而不是使用单个样本)更改 SGD,获取由批量大小决定的“少数”值。

现在,权重的更新是一个非常昂贵的过程,此时应该清楚的是,大量更新权重(使用 SGD)比计算梯度和只更新几次的成本更高(批量较大)。

【讨论】:

    猜你喜欢
    • 2017-06-27
    • 2018-10-18
    • 2018-01-08
    • 2019-10-07
    • 2020-12-15
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多