Keras深度学习:入门、实战与进阶
上QQ阅读APP看书,第一时间看更新

1.4.1 MNIST数据集

MNIST数据集(Mixed National Institute of Standards and Technology Database,手写数字识别数据集)是由卷积神经网络之父Yann LeCun所收集的,其数据量不会太大,而且是单色的图像,很适合深度学习的初学者用来练习建立模型、训练、预测。

MNIST数据集共有训练数据60 000项、测试数据10 000项。MNIST数据集中的每一项数据都由image(数字图像)和label(真实的数字)所组成。

Keras已经提供了现成的函数dataset_mnist(),可以帮助我们下载并读取数据。第一次执行dataset_mnist(),程序会检查用户目录下是否已经有MNIST数据集文件,如果还没有,就会自动下载文件。MNIST数据文件下载后会存储在用户个人文件夹中。以Windows为例,因为笔者的用户名称是Daniel,所以下载后的数据集文件会存在目录C:\Users\Daniel\Documents\.keras\datasets中,文件名为mnist.npz。如果在线下载太慢,可以通过离线下载方式将文件下载后存放在此目录。mnist.npz数据集包含以下四个文件。

  • train-images-idx3-ubyte.gz:训练集图像。
  • train-labels-idx1-ubtyte.gz:训练集标签。
  • t10k-images-idx3-ubyte.gz:测试集图像。
  • t10k-labels-idx1-ubyte.gz:测试集标签。

我们将MNIST数据集读入R语言中,分别查看这4个数据集的维度大小。

> # 读入MNIST数据集
> library(keras)
> c(c(x_train_image, y_train_label), c(x_test_image, y_test_label)) %<-% dataset_mnist()
> # 查看数据集维度
> cat('train_data=',dim(x_train_image))
train_data= 60000 28 28
> cat('test_data=',dim(x_test_image))
test_data= 10000 28 28
> cat('y_train_label:',dim(y_train_label))
y_train_label: 60000
> cat('y_test_label:',dim(y_test_label))
y_test_label: 10000

从以上执行结果可知,四个数据集大小分别如下。

  • x_train_image:60 000张28×28像素的训练数据图像。
  • x_test_image:10 000张28×28像素的测试数据图像。
  • y_train_label:60 000个训练数字0~9标签。
  • y_test_label:10 000个测试数字0~9标签。

运行以下命令,绘制x_train_image数据集的前9张图像,标题用y_train_label对应的数字标签显示。结果如图1-4所示。

> # 显示MNIST数据的image和label
> par(mfrow=c(3,3))
> par(mar=c(0, 0, 1.5, 0), xaxs='i', yaxs='i')
> for(i in 1:9){
+   plot(as.raster(x_train_image[i,,],max = 255))
+   title(main = paste0('label=', y_train_label[i]))
+ }
> par(mfrow=c(1,1))

从图1-4可知,x_train_image训练集的第1个数字图像是5,数据标签为5。

025-1

图1-4 显示MNIST数据的image和label