【问题标题】: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 进行训练!

【问题讨论】:

    标签: python tensorflow machine-learning keras scikit-learn


    【解决方案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”?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 2018-10-02
    • 2019-01-09
    • 2020-03-24
    • 2021-08-06
    • 2018-08-10
    • 2021-01-12
    相关资源
    最近更新 更多