Keras利用卷积神经网络(CNN)识别手写数字(环境python3.5)

本文介绍了如何利用Keras的卷积神经网络(CNN)对MNIST数据集的手写数字进行识别。首先进行数据预处理,然后构建包含卷积和池化层的CNN模型,接着评估模型的训练和验证准确率,最后进行预测并展示模型的优秀性能,准确率高达0.99。
摘要由CSDN通过智能技术生成

今天介绍如何利用卷积神经网络进行MNIST数据集的手写数字识别,即将手写数字图像images识别为数字标签labels
目录

建模思路如下图:

这里写图片描述


数据预处理

    MNIST数据集共有训练数据60 000项、测试数据10 000项。其数据都由images(数字图像)与labels(真实的数字)所组成

尝试调用该数据集的第0项
这里写图片描述
这里写图片描述
下面展示数据集的前十项:
这里写图片描述
接下来进行数据预处理
1、 导入所需模块
这里写图片描述
2、读取数据
这里写图片描述
3、将fetures(数字图像特征值)转换为6000 x 28 x 28 x 1的四维矩阵
这里写图片描述

模型建立

这里写图片描述
这里写图片描述
解释一下,这里的卷积层1是将一张手写数字图像以16个滤镜进行分解,分别侧重于同一张图片中不同的特征,池化层1是将分解得到的16张图片中与识别无关的信息切除,直观看来是将图片切掉了1/2大小。
卷积层2和池化层2做的工作相似。
我们可以运用代码查看模型概况:
这里写图片描述

评估模型准确率

训练模型之后,我们用识别准确率对模型好坏进行评估。
这里写图片描述
训练的准确率变化以橙色表出,验证的准确率变化以蓝色表出
可以发现,无论是训练还是验证,准确率都越来越高

也可以查看误差率变化曲线,它是(1-准确率)的结果
这里写图片描述
同样的,训练误差以蓝色表示,验证误差以橙色表示
可以发现,训练和验证的误差都越来越低

使用测试数据集来评估模型准确性,可以发现,其精确度高达0.99

  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一个简单的手写数字识别卷积神经网络Python 代码: 1. 首先导入需要的库: ```python import numpy as np import tensorflow as tf from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPooling2D, Dropout ``` 2. 加载 MNIST 数据集: ```python (x_train, y_train), (x_test, y_test) = mnist.load_data() ``` 3. 对数据进行预处理: ```python x_train = x_train.reshape(x_train.shape[0], 28, 28, 1) x_test = x_test.reshape(x_test.shape[0], 28, 28, 1) x_train = x_train.astype('float32') x_test = x_test.astype('float32') x_train /= 255 x_test /= 255 ``` 4. 将标签进行 one-hot 编码: ```python y_train = tf.keras.utils.to_categorical(y_train, 10) y_test = tf.keras.utils.to_categorical(y_test, 10) ``` 5. 构建卷积神经网络模型: ```python model = Sequential() model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1))) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(64, kernel_size=(3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Flatten()) model.add(Dense(128, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(10, activation='softmax')) ``` 6. 编译模型: ```python model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) ``` 7. 训练模型: ```python model.fit(x_train, y_train, batch_size=128, epochs=10, validation_data=(x_test, y_test)) ``` 8. 在测试集上评估模型: ```python score = model.evaluate(x_test, y_test, verbose=0) print('Test loss:', score[0]) print('Test accuracy:', score[1]) ``` 这段代码实现了一个简单的手写数字识别卷积神经网络模型,可以在 MNIST 数据集上得到约 99% 的准确率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值