【发布时间】: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