首页 > 解决方案 > 是否需要将数据分成三份;训练、验证和测试?

问题描述

这里描述了测试集、训练集和验证集之间的区别。在大多数关于训练神经网络的文档中,我发现使用了这三个集合,但它们通常是预定义的。

我有一个相对较小的数据集(总共 906 个 3D 图像,分布是平衡的)。我正在使用sklearn.model_selection.train_test_split函数来拆分训练和测试集中的数据,并在我的模型中使用 X_test 和 y_test 作为验证数据。

X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=1)
...
history = AD_model.fit(
    X_train, 
    y_train, 
    batch_size=batch_size,
    epochs=100,
    verbose=1,
    validation_data=(X_test, y_test))

训练后,我在测试集上评估模型:

test_loss, test_acc = AD_model.evaluate(X_test,  y_test, verbose=2)

我见过其他人也是这样处理的,但是由于模型已经看到了这些数据,我不确定这种方法的后果是什么。有人能告诉我使用同一组进行验证和测试的后果是什么吗?而且由于我已经有一个小数据集(导致过度拟合),是否有必要将数据分成 3 组?

标签: pythontensorflowkerasscikit-learnconv-neural-network

解决方案


您可以使用train, validate, test = np.split(df.sample(frac=1), [int(.6*len(df)), int(.8*len(df))])它为训练、验证和测试集生成 60%、20%、20% 的拆分。

希望对你有帮助 谢谢阅读!!


推荐阅读