从MNIST数据集更改训练和测试集的大小

时间:2019-01-22 21:34:46

标签: python keras mnist

我正在使用MNIST和Keras来学习CNN。我正在Keras API下下载MNIST手写数字数据库,如下所示。该数据集已经被分割成60.000张图像用于训练,另外10.000张图像用于测试(请参见Dataset - Keras Documentation)。

from keras.datasets import mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()

我如何加入培训和测试集,然后将它们分成70%用于培训和30%用于测试?

1 个答案:

答案 0 :(得分:2)

mnist.load_data中没有这样的论点。相反,您可以通过numpy连接数据,然后通过sklearn(或numpy)拆分数据:

from keras.datasets import mnist
import numpy as np
from sklearn.model_selection import train_test_split

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x = np.concatenate((x_train, x_test))
y = np.concatenate((y_train, y_test))

train_size = 0.7
x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=train_size, random_seed=2019)

设置可重复性的随机种子。

通过numpy(如果您不使用sklearn):

# do the same concatenation
np.random.seed(2019)
train_size = 0.7
index = np.random.rand(len(x)) < train_size  # boolean index
x_train, x_test = x[index], x[~index]  # index and it's negation
y_train, y_test = y[index], y[~index]

您将获得大约所需大小的数组(〜210xx而不是21000测试大小)。

mnist.load_data的源代码看起来像是该函数只是从已经按60000/10000测试进行拆分的URL中获取此数据,因此只有一种级联解决方法。

您还可以从http://yann.lecun.com/exdb/mnist/下载MNIST数据集,并对其进行手动预处理,然后将其连接(根据需要)。但是,据我了解,由于在标准基准测试中使用了这种拆分方式,因此将其分为6万个训练示例和10000个测试示例。