1.4.2 数据预处理

我们在建立深度神经网络(Deep Neural Network)模型前,必须先对image和label的内容进行预处理,才能使用全连接神经网络模型进行训练、预测。数据预处理分为以下两部分:

  • image(数字图像的特征值)数据预处理;
  • label(数字图像的真实值)数据预处理。

image数据预处理可分为以下两个步骤:

1)将原本2维的28×28的数字图像转换为1维的784的数据;

2)对数字图像image的数字进行标准化处理。

在预处理前,我们通过以下语句查看x_train_image的第1个数字图像内容,如图1-5所示。

> # 查看x_train_image的第1个数字图像内容
> x_train_image[1,,]
025-2

图1-5 训练数据集的第1个数字图像内容

从图1-5可知,图像内容有28行28列,因为1张黑白图像由28×28的像素组成。1个数字代表1个黑白像素,数字越大,颜色越浅,比如0为黑色,255为白色。图1-5中非0数字刚好组成5的形状。

我们通过Keras中的array_reshape()函数将数字图像从2维的28×28转为1维的784的数据,并对结果除以255进行标准化处理,处理后的所有数字在[0,1]之间。

> # image预处理
> # reshape
> x_Train <- array_reshape(x_train_image,dim = c(60000,784))
> x_Test <- array_reshape(x_test_image,dim = c(10000,784))
> # 标准化
> x_Train_normalize <- x_Train / 255
> x_Test_normalize <- x_Test / 255
> # 查看预处理后的训练数据维度
> dim(x_Train_normalize)
[1] 60000   784
> # 查看预处理后的数字范围
> range(x_Train_normalize)
[1] 0 1

label标签字段原本是0~9的数字,必须经过独热编码(One-Hot Encoding,1位有效编码)转换为10个0或1的组合,例如数字7经过独热编码转换后是0000000100,正好对应输出层的10个神经元。可以通过Keras中的to_categorical()函数轻松实现该转换。

> # label独热编码
> y_train_label[1:5]
[1] 5 0 4 1 9
> y_TrainOneHot <- to_categorical(y_train_label)
> y_TestOneHot <- to_categorical(y_test_label)
> y_TrainOneHot[1:5,]
     [,1]   [,2]   [,3]  [,4]  [,5]  [,6]  [,7]  [,8]   [,9]  [,10]
[1,]    0      0      0     0     0     1     0     0      0      0
[2,]    1      0      0     0     0     0     0     0      0      0
[3,]    0      0      0     0     1     0     0     0      0      0
[4,]    0      1      0     0     0     0     0     0      0      0
[5,]    0      0      0     0     0     0     0     0      0      1

比如第1个数字是5,所以第1行、第6列为1,其他列为0;比如第2个数字是0,所以第1行、第1列为1,其他列为0。