人工智能学习:NMIST数据分类识别-CNN网络(3)

2023-05-16

这里采用CNN模型(卷积神经网络)来进行MNIST数据集的分类识别

1 导入模块
首先,导入需要的模块

import numpy as np

import tensorflow as tf
from tensorflow import keras
from keras import models, layers

import matplotlib.pyplot as plt

2 载入MNIST数据集
调用keras集成的mnist的load_data函数载入数据集

# load MNIST dataset
(train_images, train_labels), (test_images, test_labels) = keras.datasets.mnist.load_data()

# train_images: 60000*28*28, train_labels: 60000*1
# test_images: 10000*28*28, test_labels: 10000*1

# pre-process data, change data shape & type
train_input = train_images.reshape(60000,28,28,1)
train_input = train_input.astype('float32')/255
test_input = test_images.reshape(10000,28,28,1)
test_input = test_input.astype('float32')/255
train_output = keras.utils.to_categorical(train_labels)
test_output = keras.utils.to_categorical(test_labels)

3 构建模型
构建一个卷积神经网络,定义构建函数如下

def build_model():
    model = models.Sequential()
    model.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)))
    model.add(layers.MaxPooling2D((2,2)))
    model.add(layers.Dropout(0.25))
    model.add(layers.Conv2D(64, (3,3), activation='relu'))
    model.add(layers.MaxPooling2D((2,2)))
    model.add(layers.Flatten())
    model.add(layers.Dense(64, activation='relu'))
    model.add(layers.Dropout(0.5))
    model.add(layers.Dense(10, activation='softmax'))
    
    model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])
    
    return model

构建模型

# build model
network = build_model()

# show network summary
network.summary()

显示结果如下

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 26, 26, 32)        320       
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 13, 13, 32)        0         
_________________________________________________________________
dropout (Dropout)            (None, 13, 13, 32)        0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 11, 11, 64)        18496     
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 5, 5, 64)          0         
_________________________________________________________________
flatten (Flatten)            (None, 1600)              0         
_________________________________________________________________
dense (Dense)                (None, 64)                102464    
_________________________________________________________________
dropout_1 (Dropout)          (None, 64)                0         
_________________________________________________________________
dense_1 (Dense)              (None, 10)                650       
=================================================================
Total params: 121,930
Trainable params: 121,930
Non-trainable params: 0
_________________________________________________________________

显示是一个多层的卷积神经网络

4 训练模型
调用如下函数

# train, with batch size and epochs
network.fit(train_input, train_output, epochs=10, batch_size=128)

显示训练结果如下

Epoch 1/10
469/469 [==============================] - 16s 4ms/step - loss: 0.4858 - accuracy: 0.8445
Epoch 2/10
469/469 [==============================] - 2s 4ms/step - loss: 0.1779 - accuracy: 0.9471
Epoch 3/10
469/469 [==============================] - 2s 4ms/step - loss: 0.1290 - accuracy: 0.9641
Epoch 4/10
469/469 [==============================] - 2s 4ms/step - loss: 0.1045 - accuracy: 0.9695
Epoch 5/10
469/469 [==============================] - 2s 4ms/step - loss: 0.0883 - accuracy: 0.9744
Epoch 6/10
469/469 [==============================] - 2s 4ms/step - loss: 0.0795 - accuracy: 0.9770
Epoch 7/10
469/469 [==============================] - 2s 4ms/step - loss: 0.0719 - accuracy: 0.9797
Epoch 8/10
469/469 [==============================] - 2s 4ms/step - loss: 0.0689 - accuracy: 0.9803
Epoch 9/10
469/469 [==============================] - 2s 4ms/step - loss: 0.0669 - accuracy: 0.9811
Epoch 10/10
469/469 [==============================] - 2s 4ms/step - loss: 0.0636 - accuracy: 0.9821

显示每次训练的损失函数和准确率,准确率最后为0.9821。

5 评估训练后的模型
调用评估函数

# evaluate performance using test data
network.evaluate(test_input, test_output)

显示结果如下

313/313 [==============================] - 1s 2ms/step - loss: 0.0347 - accuracy: 0.9896
[0.034671902656555176, 0.9896000027656555]

准确率为0.9896。

这里显示测试集前100张的分类识别结果

# perform prediction on test data
predict_output = network.predict(test_input)
# lines and columns of subplots

m = 10
n = 10
num = m*n

# figure size
plt.figure(figsize=(11,11))

# plot first 100 pictures of test images and results
for i in range(num):
    plt.subplot(m,n,i+1)
    
    if np.argmax(predict_output[i]) == np.argmax(test_output[i]):
        opt = 'gray_r'
    else:
        opt = 'gray'
                 
    plt.imshow(test_images[i], cmap=opt)
    #plt.axis('off')
    plt.xticks([])
    plt.yticks([])

plt.show()

结果如下
在这里插入图片描述
前100张图片全部识别正确。从结果来看,CNN神经网络训练后的识别准确率没有前面全连接层神经网络的准确率高,但是它的泛化能力比前面的网络好,体现为它在测试集上的识别准确率高于前面全连接层组成的模型。

参考链接:https://blog.csdn.net/weixin_45825073/article/details/121753882

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

人工智能学习:NMIST数据分类识别-CNN网络(3) 的相关文章

随机推荐

  • 问题解决:ImportError: The _imagingft C module is not installed

    在测试YOLO v5时出现错误提示 xff1a ImportError The imagingft C module is not installed 经查是pillow库的问题 解决方法 重新安装pillow xff0c 先卸载已有的pi
  • Jetson Nano设置风扇自启动

    Jetson Nano跑一些如目标识别等需要较大计算量的程序 xff0c 散热板会非常的热 xff0c 为避免主板过热 xff0c 通常在散热板上加装一个风扇增强散热 风扇需要软件指令进行驱动 xff0c 驱动风扇的指令为 sudo sh
  • Ubuntu 18.04安装gazebo9

    首先 xff0c 把gazebo的源添加到apt的source list中 sudo sh c echo deb http packages osrfoundation org gazebo ubuntu stable 96 lsb rel
  • 问题解决:/usr/bin/ld: cannot find -lbz2

    在项目编译过程中 xff0c 出现类似如下的错误 usr bin ld cannot find lbz2 经查询 xff0c 是找不到bz2的库文件 xff0c 用whereis命令查询 whereis libbz2 找不到对应的库文件 x
  • 常用Git命令

    通过git命令可以对项目代码库执行克隆 拉取 提交等操作 常用的git命令有如下 git clone 克隆代码库 xff0c 把远程代码库克隆到本机当前目录 xff0c 如 git clone https github com PX4 PX
  • 【Android】原来Toolbar还能这么用?Toolbar使用最全解析。网友:终于不用老是自定义标题栏啦

    一个Toolbar的UI可以做成什么样 xff1f 做出什么效果 xff1f 这是我最近在研究的问题 目录 带导航图标的Toolbar带标题的Toolbar带小标题的Toolbar带Logo的Toolbar带进度条的Toolbar带菜单的T
  • Linux安装Beyond Compare

    Beyond Compare是一款很好用的代码比对软件 xff0c 提供了在Windows xff0c Linux等平台的安装包 在Linux下安装Beyond Compare的方法如下 参考链接 xff1a https www scoot
  • Linux下压缩解压文件和目录的方法(zip, tar)

    Linux下可以用zip命令方便的压缩文件或文件夹 压缩文件 zip data zip data xls zip data zip data1 xls data2 xls 上述命令把一个文件或者多个文件压缩到一个zip文件 压缩目录 zip
  • Jupyter Notebook安装

    Jupyter Notebook是一个非常好用的交互式Python运行的软件 安装方法如下 在命令行输入 pip3 install jupyter 安装后根据提示 xff0c Jupyter相关软件安装在 local bin目录下 xff0
  • Ubuntu添加截屏快捷键的方法

    在Ubuntu下面具有截屏的命令 xff08 gnome screenshot xff09 xff0c 可以通过简单的设置方便的添加截屏快捷键 通过 Settings gt Devices gt Keyboard选项 xff0c 添加快捷键
  • Windows下修改Jupyter Notebook默认字体的方法(custom.css)

    在Windows下Jupyter Notebook代码显示的默认字体为宋体 xff0c 视觉效果不是很好 xff0c 可以通过设置修改默认的显示字体 通过用户目录 C User Administrator jupyter custom 下的
  • Jupyter Notebook添加代码自动补全功能的方法

    Jupyter Notebook成为一款非常受欢迎的交互式Python运行环境的软件 通过如下的方法可以添加代码自动补全的功能 输入命令安装插件 pip3 install jupyter contrib nbextensions 然后运行
  • 修改grub默认启动选项的方法

    在Windows系统基础上 xff0c 再安装Linux xff0c 形成双系统 这样在grub启动菜单中会包含Linux Windows等多个选项 xff0c 默认为第一个选项 xff0c 常规的Linux启动 通过修改配置文件 etc
  • 在云服务器上搭建Jupyter Notebook服务

    Jupyter Notebook提供了远程登录的功能 xff0c 可以在云服务器上配置Jupyter Notebook xff0c 用户可以远程登录和运行Python代码 这里使用的是腾讯云的Ubuntu服务器 xff0c 配置方法如下 1
  • 常用Linux命令

    记录一些常用的Linux命令 1 用户管理 增加用户 useradd lt user name gt useradd g lt group name gt lt user name gt g选项指定新用户所属的用户组 修改用户的组别 use
  • 在云服务器上安装VNC远程桌面服务

    云服务器操作系统通常不包含图形界面 xff0c 通过在服务器上安装VNC服务 xff0c 可以让用户以图形化界面远程登录到云服务器 这里服务器使用的是Ubuntu Server 18 04系统 1 安装图形界面 首先在服务器端安装图形化桌面
  • 【Android】ADB无线连接Android设备

    目录 简介无线连接的条件adb连接设备方法一方法二 修改端口号方法一方法二 辅助工具android toolscrcpy gui 问题集合 简介 Android Debug Bridge xff0c 简称adb xff0c 是一种功能多样的
  • 人工智能学习:载入MNIST数据集(1)

    MNIST数据集是人工智能学习入门的数据集 xff0c 包含了一系列的手写的数字图片 载入MNIST数据集的方法很简单 xff0c Tensorflow集成了载入数据集的方法 首先导入tensorflow模块和matplotlib pypl
  • 人工智能学习:MNIST数据分类识别神经网络(2)

    在MNIST数据集上构建一个神经网络 xff0c 进行训练 xff0c 以达到良好的识别效果 1 导入模块 首先 xff0c 导入必要的模块 span class token keyword import span numpy span c
  • 人工智能学习:NMIST数据分类识别-CNN网络(3)

    这里采用CNN模型 xff08 卷积神经网络 xff09 来进行MNIST数据集的分类识别 1 导入模块 首先 xff0c 导入需要的模块 span class token keyword import span numpy span cl