当我包含验证数据时,为什么模型训练会花费更长的时间?

Why does model training take significantly way longer when I include validation data?

显然,我知道添加验证数据会使训练时间更长,但我在这里所说的时差是荒谬的。代码:

# 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 上训练!

我假设验证按预期工作,并且您在训练过程本身中遇到了问题。您正在使用 batch_size = 1 和 steps_per_epoch = 10,这意味着 模型在每个时期 期间只会看到 10 个数据点。这就是为什么只需要几秒钟。另一方面,您不使用 validation_steps 参数,这意味着每个时期之后的验证将 运行 直到您的验证数据集耗尽,即 10.000 步。因此时代不同。您可以阅读有关 model.fit 及其参数 in the official documentation.

的更多信息

如果您的训练数据集不是无限的,我建议您删除 steps_per_epoch 参数。如果是,则将 len(x_train)//batch_size 的值传递给它。这样,模型将被输入每个时期的每个训练数据点。我假设每个纪元将花费大约 1.5 小时,而不是你目前拥有的秒数。我还建议增加 batch_size,如果没有特定原因使用 1 的批量大小。

已编辑:拼写错误