DL with python(6)——Keras实现手写数字识别(全连接网络)

本文涉及到的是中国大学慕课《人工智能实践:Tensorflow笔记》第三讲的内容,通过六步法利用keras框架搭建神经网络的手写数字识别模型,这里只涉及简单的全连接网络,旨在对整体的思路进行了解。

六步法的基本步骤和DL with python(4)——基于Keras的二层神经网络鸢尾花分类中介绍的一致,这里只是数据集和网络的结构有所改变,基本框架没有改变。
在第四讲对网络八股的拓展中,这部分代码将作为拓展的基础,因此有必要梳理一下。

MNIST数据集

MNIST 数据集是非常有名的一组数据,一共有 7 万张图片,是 28×28 像素的 0 到 9 手写数字数据集,其中 6 万张用于训练,1 万张用于测试。每张图片包括 784(28×28)个像素点,使用全连接网络时可将 784 个像素点组成长度为 784 的一维数组,作为输入特征。数据集图片如下所示。
DL with python(6)——Keras实现手写数字识别(全连接网络)_第1张图片

代码实现

需要注意的几点:
MNIST数据的训练集和测试集是分开的,因此不需要进行划分,即设置测试集的比重。
灰度图的像素大小是0-255,需要归一化到0-1。
图片大小是28×28,对于全连接网络,要转换为1×784的一维向量输入。

# 第一步,导入相关模块
import tensorflow as tf
# 第二步,导入数据集
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data() # 训练集特征和标签,测试集特征和标签
x_train, x_test = x_train / 255.0, x_test / 255.0 # 灰度值归一化为0-1之间
# 第三步,搭建网络结构
model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(),   # 输入特征拉直为1-D数组
    tf.keras.layers.Dense(128, activation='relu'),  # 网络层1
    tf.keras.layers.Dense(10, activation='softmax') # 网络层2,输出概率分布
])
# 第四步,配置训练方法
model.compile(optimizer='adam',                     # adam优化器
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), # 输出概率分布,所以from_logits=False
              metrics=['sparse_categorical_accuracy'])
# 第五步,执行训练,依次为训练集样本,训练集标签,小批量大小32,训练轮次5,测试集,训练集循环1轮次进行一次测试
model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1)
# 第六步,打印网络结构和参数统计
model.summary()

Fashion_mnist数据集

Fashion_mnist 数据集具有 mnist 近乎所有的特征,包括 60000 张训练图片和 10000 张测试图片,图片被分为十类,每张图像为 28×28 的分辨率。
DL with python(6)——Keras实现手写数字识别(全连接网络)_第2张图片
将MNIST数据集替换成Fashion_mnist 数据集,十分简单,只要修改第二步导入数据集的代码就可以了,其他部分仍然可以使用。

# 第二步,导入数据集
fashion = tf.keras.datasets.fashion_mnist
(x_train, y_train),(x_test, y_test) = fashion.load_data() # 训练集特征和标签,测试集特征和标签
x_train, x_test = x_train / 255.0, x_test / 255.0 # 灰度值归一化为0-1之间

你可能感兴趣的:(Python深度学习,神经网络,python)