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



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

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,使用与上述相同的哑数据拆分方法(。大多数例子只是直接将数据分解为训练和测试,而我们在现实生活中几乎从未这样做过。

有人能提供建议吗?

keras.datasets.mnist数据集由Yann LeCun(参考文档(加载数据集

数据集的设置方式是包含60000个训练数据和10000个测试数据。

由于load_data()只返回Numpy数组,因此您可以轻松地将训练和测试数组连接到一个数组中,之后您可以随心所欲地使用新数组。

如果要从训练集中提取验证集,则可以先打乱训练集,然后提取验证集。

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

最新更新