- Keras深度学习:入门、实战与进阶
- 谢佳标
- 678字
- 2024-10-30 00:46:57
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,,]
图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。