在许多示例中,我看到使用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之间浮动:用作验证数据的训练数据的一部分。该模型将对这部分训练数据进行分离,不对其进行训练,并将在每个时期结束时评估该数据的损失和任何模型指标。
我是该领域和工具的新手,所以我对不同的分离器为您提供的直觉。主要是,我找不到关于Keras'validation_split
如何工作的任何信息。有人可以向我解释一下,当有更好的方法时?在我看来,内置的kwarg是分割测试数据集的最简洁,最简单的方法,而不必以不同的方式构建您的训练循环。
答案 0 :(得分:1)
两者之间的差异非常微妙,可以结合使用。
Kfold
以及scikit-learn
中的类似功能会将您的数据随机分成k
个折叠。然后,您可以训练模型每次都进行一次折叠并在折叠处进行测试。
validation_split
非随机地获取您数据的一小部分。根据Keras documentation,它将从您的数据末尾获取分数,例如0.1
将保留输入矩阵中最后10%的行。验证拆分的目的是让您评估模型在训练集上的表现以及训练期间每个时期的保留集。如果模型继续改进训练集而不是验证集,那么这是潜在过度拟合的明显迹象。
理论上,您可以使用KFold
交叉验证来构建模型,同时还使用validation_split
来监控每个模型的性能。在每次折叠时,您将从训练数据中生成新的validation_split
。