1.问题描述
通过MNIST内含有60000个数据进行训练的图像(train),图片为28*28的像素矩阵,并定义一个三层的多层感知机。经过训练,最终可以对测试的数字图像又较为准确的识别。
2.数据导入
由于要用到MNIST中的图像,我可以利用keras.datasets直接导入MNIST中的数据,包括输入集和输出集。
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
(train_image, train_labels), (test_image, test_labels) = tf.keras.datasets.mnist.load_data()
3.图像处理
首先对图像增加通道维度。输入的训练图像(train)和测试图像(test)可以看作是四维的,训练的图像可看作([60000,28,28,1])。之后要对训练图像和测试图像进行归一化处理,目的是将图片中的这些值缩小到0和1之间,方便其送到神经网络模型之中。因此我们首先将这些图像组件的数据类型从整型转为浮点型,然后除以255,从而更方便接下来的训练。图像处理的代码如图所示:
train_image = tf.expand_dims(train_image, -1)
test_image = tf.expand_dims(test_image, -1)
train_image = tf.cast(train_image/255, tf.float32)
test_image = tf.cast(test_image/255, tf.float32)
train_labels = tf.cast(train_labels, tf.int64)
test_labels = tf.cast(test_labels, tf.int64)
dataset = tf.data.Dataset.from_tensor_slices((train_image, train_labels)).shuffle(60000).batch(256)
test_dataset = tf.data.Dataset.from_tensor_slices((test_image, test_labels)).batch(256)
4.创建模型(MLP多层感知机)