如何正确地将MNIST数据集拆分为训练和验证集?

时间:2020-10-03 18:20:43

标签: tensorflow machine-learning training-data

我有一个非常简单的代码,它从MNIST获取训练数据,然后选择最后10,000个示例作为验证集,然后从训练集中删除最后10,000个示例。

import tensorflow as tf 
import tensorflow_datasets as tfds
(X_train, Y_train)= tf.keras.datasets.mnist.load_data()

X_valid = X_train[-10000:]
Y_valid = Y_train[-10000:]

X_train = X_train[0:40000]
Y_train = Y_train[0:40000]

但是,我认为这很愚蠢,我想通过以下方式使数据拆分过程更加复杂:

  1. 我应该指定要用作验证集的数据的百分比,而不是仅获取最后一个样本

  2. 在将数据划分为训练和验证之后,我需要一种方法来确保数据平衡。抓一部分可能会导致与某些数字相关的训练示例很少。

令人惊讶的是,我几乎遍历了所有Tensorflow教程,而且它们都没有进行任何验证(https://www.tensorflow.org/guide/keras/writing_a_training_loop_from_scratch除外,它使用与上述相同的哑数据拆分方法)。大多数示例只是将数据直接拆分为训练和测试,而我们在现实生活中几乎从未这样做过。

有人可以建议吗?

1 个答案:

答案 0 :(得分:2)

keras.datasets.mnist数据集通过Yann LeCunRefer Doc)加载数据集

数据集的设置方式使其包含60,000个训练数据和10,000个测试数据。

由于load_data()仅返回Numpy数组,因此您可以轻松地将训练和测试数组连接到单个数组中,然后您可以根据需要使用新数组。

如果您想从训练集中获得验证集,则可以先将训练集洗牌,然后提取验证集。

所有这些操作都是简单的Numpy Array操作,甚至不需要任何Tensorflow功能。