【CNN实战】简单CNN网络实现手写数据集识别(附完整代码)

基于Keras实现手写数据集识别(附完整代码)

本文介绍卷积神经网络的入门案例,通过搭建和训练一个模型,实现mnist手写数据集分类

思路流程

1、导入 mnist 数据集
2、探索数据集,并进行数据预处理
3、构建模型
4、训练模型
5、使用训练好的模型

一、导入数据集

使用到mnist数据集,它包含10 类,即手写数字0-9,共 70000 张灰白图片。

数据集中,60000 个样例被作为训练集(每张图片对于一个标签),剩余 10000 个样例作为测试集(每张图片也对于一个标签)。类别之间相互独立,不存在重叠的部分。使用以下代码完成数据集导入:

(train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data()

二、查看数据集,并进行数据预处理

(1)归一化处理

将像素的值标准化至0到1的区间内。(对于灰度图片来说,每个像素最大值是255,每个像素最小值是0,也就是直接除以255就可以完成归一化。)

train_images, test_images = train_images / 255.0, test_images / 255.0

(2)查看数据

将数据集前20个图片数据可视化显示

plt.figure(figsize=(20,10))
for i in range(20):
    # 将整个figure分成2行10列,绘制第i+1个子图。
    plt.subplot(2,10,i+1)
    plt.xticks([]) # 设置不显示x轴刻度
    plt.yticks([]) # 设置不显示y轴刻度
    plt.grid(False) # 设置不显示子图网格线
    plt.imshow(train_images[i], cmap=plt.cm.binary)
    plt.xlabel(train_labels[i]) # 设置x轴标签显示为图片对应的数字
# 显示图片
plt.show()

可视化结果如下:
在这里插入图片描述

(3)调整数据到我们需要的格式

数据维度为(batch_size, width, height, channel), 原始数据维度为(60000,28,28)/(10000,28,28),此处,我们将数据增加了channel维度,以便于输入到后续网络进行卷积。因为此处为灰度图,所以channel维度为1,若为彩色图片(即RGB),则channel为3。

train_images = train_images.reshape((60000, 28, 28, 1))
test_images = test_images.reshape((10000, 28, 28, 1))

三、构建模型

(1)模型结构搭建

常见卷积神经网络(CNN),主要通过几个卷积层Conv2D 和 池化层MaxPooling2D 层的叠加实现对输入数据的特征提取,最后通过全连接层实现分类。

model = models.Sequential([
    # 设置二维卷积层1,设置32个3*3卷积核,激活函数为ReLu函数,input_shape参数将图层的输入形状设置为(28, 28, 1)
    layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
    layers.MaxPooling2D((2, 2)), # 池化层1,2*2采样
    
    # 设置二维卷积层2,设置64个3*3卷积核,激活函数为ReLu函数
    layers.Conv2D
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小主的学习计划

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值