在许多示例中,我看到通过使用Kfold
、StratifiedKfold
或其他预构建的数据集分割器来执行训练/交叉验证数据集分割。Keras模型有一个内置的validation_split
kwarg,可用于训练。
model.fit(self, x, y, batch_size=32, nb_epoch=10, verbose=1, callbacks=[], validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None)
(https://keras.io/models/model/)
validation_split:浮动在0和1之间:作为验证数据使用的训练数据的一部分。模型将分离训练数据的这一部分,不会对其进行训练,并将在每个epoch结束时评估该数据的损失和任何模型指标。
我是这个领域和工具的新手,所以我的直觉是不同的分离器为您提供什么。主要是,我找不到任何关于Keras的validation_split
如何工作的信息。有人能给我解释一下什么时候单独的方法更好吗?在我看来,内置的kwarg似乎是分割测试数据集最干净、最简单的方法,而不必以不同的方式构建训练循环。
两者之间的区别非常微妙,它们可以结合使用。
Kfold
和scikit-learn
中的类似功能将随机将数据拆分为k
折叠。然后,你可以训练模型,每次都拿出一个折叠,并在折叠上进行测试。
validation_split
取非随机数据的一小部分。根据Keras文档,它将从数据的末尾提取部分,例如0.1
将保留输入矩阵中最后10%的行。验证分割的目的是允许您评估模型在训练集和训练周期的每个epoch的执行情况。如果模型在训练集上继续改进,但在验证集上没有改进,那么这是潜在过拟合的明显迹象。
理论上,您可以使用KFold
交叉验证来构建模型,同时还可以使用validation_split
来监视每个模型的性能。在每一次折叠中,您将从训练数据中生成一个新的validation_split
。