当我包含验证数据时,为啥模型训练需要更长的时间?
Posted
技术标签:
【中文标题】当我包含验证数据时,为啥模型训练需要更长的时间?【英文标题】:Why does model training take significantly way longer when I include validation data?当我包含验证数据时,为什么模型训练需要更长的时间? 【发布时间】:2021-12-28 23:13:17 【问题描述】:显然,我知道添加验证数据会使训练花费更长的时间,但我在这里所说的时间差是荒谬的。代码:
# Training
def training(self, callback_bool):
if callback_bool:
callback_list = []
else:
callback_list = []
self.history = self.model.fit(self.x_train, self.y_train, validation_data=(self.x_test, self.y_test),
batch_size=1, steps_per_epoch=10, epochs=100)
尽管我的测试数据的大小是 10,000 个数据点,但上面的代码需要 30 多分钟来训练。我的训练数据大小为 40,000 个数据点,当我在没有验证数据的情况下进行训练时,我会在几秒钟内完成。有没有办法解决这个问题?为什么需要这么长时间?首先,我也在使用 gpu 进行训练!
【问题讨论】:
【参考方案1】:我假设验证按预期工作,但您在训练过程本身存在问题。您使用的是 batch_size = 1 和 steps_per_epoch = 10,这意味着 模型在每个 epoch 中只会看到 10 个数据点。这就是为什么它只需要几秒钟。另一方面,您不使用 validation_steps 参数,这意味着每个 epoch 之后的验证都将运行,直到您的验证数据集用尽,即 10.000 步。因此,时间上的差异。您可以阅读有关 model.fit 及其参数 in the official documentation 的更多信息。
如果您的训练数据集不是无限的,我建议您删除 steps_per_epoch 参数。如果是,则将 len(x_train)//batch_size 的值传递给它。这样一来,模型将获得每个时期的每个训练数据点。我假设每个时代都需要大约 1.5 小时,而不是你目前拥有的几秒钟。另外我建议增加batch_size,如果没有特别的理由使用1的batch size。
编辑:错别字
【讨论】:
为了补充这个答案,基本上每 10 个训练步骤 OP 就是“插入”10,000 个验证步骤。这意味着当前的训练设置将步数增加了 1000 倍。当然,验证步比训练步快,但减速仍然很大。 好吧,这完全有道理。网上有什么地方可以简单地教我“如何确定参数,如batch_size、steps_per、validation_steps_per”?以上是关于当我包含验证数据时,为啥模型训练需要更长的时间?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我使用 modin.pandas 比使用 Pandas 需要更长的时间 [ray]
为啥通过 ASP.NET 方法运行查询比原生 SQL 需要更长的时间?