Keras+CNN模型识别手写数字(mnist)详细分析

2023-11-18

CNN模型

CNN卷积神经网络,包含卷积层(卷积运算提取输入的不同特征,更多层的网络能从低级特征中迭代提取等复杂的特征),线性整流层(RELU),池化层(卷积后会得到维度很大的特征,将特征切成几个区域,取最大值或平均值,得到新的较小维度特征),全连接层(局部特征结合变成全局特征,计算最后得分)

卷积:使用卷积核对图像进行扫描,得到特征图

 

池化:池化即下采样,目的减少特征图

详细内容参见:https://blog.csdn.net/liangchunjiang/article/details/79030681

 

实验内容 

加深对卷积神经网络模型的理解,能够使用卷积神经网络模型解决简单问题

根据卷积神经网络模型的相关知识,使用Python语言实现一个简单卷积神经网络模型,该模型能够实现手写数字识别。

代码详解

jupyter notebook

Python 3.7

TensorFlow 1.13

Keras 2.3.1

数据处理

from keras.datasets import mnist
from keras.utils import np_utils
import numpy as np 
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
(x_train, y_train), (x_test, y_test) = mnist.load_data()
print(x_train.shape)
print(y_train.shape)
print(x_test.shape)
print(y_test.shape)

def plot_images(images, idx, num=10):
    fig = plt.gcf()
    for i in range(num):
        ax = plt.subplot(5, 2, 1+i)
        ax.imshow(images[idx+i], cmap='binary')
    plt.show()
plot_images(x_train, 0, 10)

x_train_nom = x_train.reshape(x_train.shape[0], 28, 28, 1).astype('float32')/255
x_test_nom = x_test.reshape(x_test.shape[0], 28, 28, 1).astype('float32')/255 

y_train1hot = np_utils.to_categorical(y_train)
print(y_train1hot[:3])

加载mnist数据集,并进行提取,plot_images函数用于展示图片

然后将图片数据reshape成四维,便于之后输入,然后除以255进行标准化处理

标签数据to_categorical转化为独热编码

 

构建模型

model = Sequential()

model.add(Conv2D(filters = 16,
                kernel_size=(3, 3),
                padding='same',
                activation='relu',
                input_shape=(28, 28, 1)))
model.add(MaxPooling2D(pool_size = (2, 2)))
model.add(Conv2D(filters=36,
                kernel_size = (3, 3),
                padding = 'same',
                activation = 'relu'))
model.add(MaxPooling2D(pool_size = (2, 2)))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.25))
model.add(Dense(10, activation = 'softmax'))

Sequential 建立线性堆叠模型,建立卷积层,filters卷积核个数16,kernel_size卷积核大小,input_shape输入图像大小,padding填充,activation激活函数

池化层池化窗口2

建立第一个卷积层,第一个池化层,再建立第二个卷积层,第二个池化层

加入 dropout防止过拟合

Flatten平坦层,将多维向量转化为一维向量

Dense隐藏层

最后加入输出层,一共10个神经元,表示十个类别,softmax来分类

 

模型训练

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
train_history = model.fit(x = x_train_nom,
                         y = y_train1hot,
                         epochs=10,
                         batch_size=64,
                         verbose=2,
                         validation_split=0.2)

进行模型编译和训练,epoch为10,batchsize为64,将训练数据的0.2作为验证集

 

结果分析

def show_train_history(train_history, train, validation):
    plt.plot(train_history.history[train])
    plt.plot(train_history.history[validation])
    plt.title('Train History')
    plt.ylabel(train)
    plt.xlabel('Epoch')
    plt.legend(['train', 'validation'], loc = 'upper left')
    plt.savefig(train)
    plt.show()
    
show_train_history(train_history, 'loss', 'val_loss')
show_train_history(train_history, 'accuracy', 'val_accuracy')

y_test1hot = np_utils.to_categorical(y_test)
scores = model.evaluate(x_test_nom, y_test1hot)
print(scores)

绘制准确率和loss的图像

输出得到测试准确率为 0.9912

from keras.utils import plot_model
plot_model(model, to_file = 'model1.png', show_shapes=True)

Keras可视化输出模型图

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

Keras+CNN模型识别手写数字(mnist)详细分析 的相关文章

  • 从注意力机制到Vison Transformer

    原视频链接 https www bilibili com video BV1Jh411Y7WQ spm id from 333 788 vd source f04f16dd6fd058b8328c67a3e064abd5 https www
  • 【Zabbix实战之运维篇】Zabbix的客户端自动注册配置

    Zabbix实战之运维篇 Zabbix的客户端自动注册配置 一 自动注册与自动发现介绍 1 自动注册介绍 2 自动发现介绍 3 主动模式与被动模式 二 客户端安装abbix agent2 1 下载zabbix agent2软件包 2 安装z
  • Python 设计真实反弹球算法及原理分析 (使用物理定律)

    文章简单地使用物理定律 编写程序模拟真实世界中的碰撞 在开始正式讲解之前 先看这两个代码 把球掉头 ball speed 0 ball speed 0 ball speed 1 ball speed 1 可以看到 这个代码直接把球的速度反了
  • 某电商数据分析:利用SQL做查询分析

    本文利用MYSQL在数据分析中的作用 将数据导入NAVICAT 对某电商展开数据分析工作 一 理解数据 字段说明 1 orderinfo表 1 orderid 订单编号 2 userid 用户编号 3 isPaid 订单状态 是否已支付 4
  • element ui 树形控件点击

    element 树形控件 点击当前节点 鼠标再离开后 当前节点就是个白色的背景颜色 我试了很多方法都不能完全性解决这个问题 最后是 gt gt gt el tree node focus gt el tree node content ba

随机推荐

  • Java笔试面试总结—try、catch、finally语句中有return 的各类情况

    前言 之前在刷笔试题和面试的时候经常会遇到或者被问到 try catch finally 语法块的执行顺序等问题 今天就抽空整理了一下这个知识点 然后记录下来 正文 本篇文章主要是通过举例的方式来阐述各种情况 我这里根据 try catch
  • 编译SandBoxie-plus自动生成文件脚本

    首先添加moc exe所在目录的PATH环境变量 moc exe MiscHelpers Common CheckableMessageBox h o MiscHelpers Common moc CheckableMessageBox c
  • 【科普】波特率和比特速率的理解

    什么是波特率 单位时间内传输的码元个数称为波特率 单位为 Baud 那码元又是什么呢 码元又称为 符号 即 symbol 维基百科上对码元的解释 持续一段固定时间的通信信道有效状态就是码元 这么解释比较抽象 可以解释码元的物理意义 在通信信
  • win7下exe提示无法正常启动(0xc0000906)

    本人遇见是 avast问题 卸了
  • 【特征工程】特征创建(属性创建)

    特征创建也称属性创建 包括 特征提取 映射数据到新的空间 二次特征 特征构造 1 特征提取 肯定就生成新的特征 2 将数据映射到新的空间 扩维或降维 也会形成性的特征 3 二次特征 通过基础特征构造出新的特征
  • 《Python编程无师自通》读书笔记

    不能越界访问函数内部定义的变量 global不能乱用 啥时候用元组 join连接 小点 但第一次见会觉得蛮有意思 Hangman 10 1的案例蛮有意思的 一搜才发现是十分经典的文字游戏 过程式编程的缺点以及函数式编程和面向对象编程的解决方
  • c++标准异常类的继承实现

    出处来自百度 查来学习之用 AbnomalTest cpp 定义控制台应用程序的入口点 include StdAfx h include
  • Qt中绘制折线

    Qt中绘制折线 基本流程 三要素 场景 图表 序列 创建场景 创建图表 图表添加到场景 创建序列 序列添加到图表 创建坐标轴并设置 坐标轴添加到图表 序列 坐标轴 图表配合 序列设值 1 必要配置 pro文件 QT charts 头文件 i
  • 常见操作String的方法(字符查找,索引查找)

    常见操作String的方法 字符查找 索引查找 在给定的字符串中查找字符或字符串是比较常见的操作 字符串查找分为两种形式 一种是在字符串中获取匹配字符 串 的索引值 另一种是在字符串中获取指定索引位置的字符 根据字符查找indexOf la
  • 分析排查Hystrix熔断降级未能真正生效的问题

    1 现象 压测无法进入hystrix熔断处理 检查feign hystrix enabled是开启的 hystrix设定的最大并发连接为100 降级最大并发连接为50 hystrix command default execution is
  • 算法:双指针

    双指针 双指针是一种思想或一种技巧并不是特别具体的算法 具体就是用两个变量动态存储两个结点 来方便我们进行一些操作 通常用在线性的数据结构中 特别是链表类的题目 经常需要用到两个或多个指针配合来记忆链表上的节点 完成某些操作 常见的双指针方
  • HTML 标签

    浏览器支持 所有浏览器都支持
  • Java-基于SSM+JSP的医院挂号管理系统

    项目背景 随着科学技术的飞速发展 社会的方方面面 各行各业都在努力与现代的先进技术接轨 通过科技手段来提高自身的优势 医院预约挂号系统当然也不能排除在外 医院预约挂号系统是以实际运用为开发背景 运用软件工程开发方法 采用jsp技术构建的一个
  • python+selenium自动化测试框架详解,我就讲一遍!

    前言 本文整理归纳以往的工作中用到的东西 现汇总成基础测试框架提供分享 框架采用python3 selenium3 PO yaml ddt unittest等技术编写成基础测试框架 能适应日常测试工作需要 1 使用Page Object模式
  • Debian查询硬件状态

    很早以前写过一个查询树霉派硬件状态的文章 用是Python写的一个小程序 里面用到了vcgencmd这个测温度的内部命令 但这个命令在debian里面没有 debian里只有lm sensors的外部命令 需要安装 apt get inst
  • Linux 重启后ext文件系统Inode 625047 has illegal blocks异常

    情况描述 系统重启后 发现报错 dev VolGroup00 LogVol00 contains a file system with errors check forced inode 625047 has illegal block s
  • 2021-03-31

    智能风控中的全场景化的模型组合包括哪些内容 近期某些网贷的广告 频上热搜 近有某东 远有某60 相信在大家的WX朋友圈更有大量 精彩 广告诱惑各位提前消费 于目前的政策而言 当下网贷行业的监管已达到最顶峰 网贷再也回不到巅峰时刻 但与此同时
  • 传统的项目经理可以担当Scrum Master吗

    原文链接作者 Amir Nasiri 一个习惯了传统项目管理方法的项目经理 可以在敏捷组织里担当ScrumMaster吗 这是一个很有意思的问题 也是所有项目经理在有朝一日面对敏捷方法 比如Scrum 的时候需要思考的问题 敏捷在落地实施时
  • QGis 二次开发教程(目录)

    目录 QGis 二次开发搭建 windows QGis QgsVectorLayer 图层加载 shp file矢量图层 QGis QgsVectorLayer 图层数据解析 获取经纬度集合和其他字段标量 QGis QgsVectorLay
  • Keras+CNN模型识别手写数字(mnist)详细分析

    CNN模型 CNN卷积神经网络 包含卷积层 卷积运算提取输入的不同特征 更多层的网络能从低级特征中迭代提取等复杂的特征 线性整流层 RELU 池化层 卷积后会得到维度很大的特征 将特征切成几个区域 取最大值或平均值 得到新的较小维度特征 全