Mnist模型识别自己手写数字正确率低的原因

2023-10-16 06:50

本文主要是介绍Mnist模型识别自己手写数字正确率低的原因,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

做老板的助教,大三学生问的比较多的问题,记录一下。

 

问题背景:

有的同学用官方的训练数据mnist训练好自己的模型后,自己制作数字图片给训练好的模型识别,结果正确率只有40%多,甚至用原来训练的数据集识别正确率都低于50%.

 

 

 

解决方法:

可以从下面几个方面入手,把自己手写的数字识别率提高到80%不难:

 

 

原因1西方手写体和东方手写体造成的样本差异

 

具体操作:我们把训练集的ubyte文件转成图片可以看到如下图

 

我们训练的时候用到的是 外国人写的数字,你可以看到 2 ,4 ,6 和中国人写的区别很大。找了一个图方便对比:

很明显,我们自己写出来的一些数字和原来用于训练的数字差别太大,导致识别率低,可以模仿西方数字书写提高一点识别率。

 

 

原因2:做了不恰当的图片预处理操作

如果有的同学用训练集去测试原来的模型识别率也低,那你应该是图像预处理模块出了问题。

举个例子:

我有一张训练模型时候用到的图,叫做test_0.jpg, 如下图:

,这里我们用7做测试,然后我把图片读进来测试模型的识别率,第一次我把图像做一次归一化,第二次我不做归一化,分别送给模型去识别。两次结果如下图:

 

做了归一化结果

可以看到把训练数据的7识别成了8

 

未做归一化结果:

可以看到我们把归一化那一行注释掉了之后,就识别正确了,很多训练集识别率都出了问题的,都是自己加了错误的预处理造成的,为什么?

 

因为:我们把图片读到matlab中,此时未做归一化处理,结果如下图

,很明显,这是一个 数字 7 的轮廓。现在我把它进行归一化,这里我使用其中一个同学的归一化代码演示,代码如下

他是用255减去每个像素值/maxpixel-minpixel))   的方式进行归一化。

 

归一化之数据和图形如下:

imshow() 显示为  ,归一化之后变成了白底黑字,为什么?因为如果原来是黑色,假如像素值为0 255-0/255,变成了1, 然后0~1之间1最大,所以颜色反转了,你用这个7去给模型识别,自然而然识别不出来,识别结果如下:

7认成了8

 

这个例子不是说不能做图片预处理,是说要进行正确的预处理。

 

 

建议用photoshop的柔性画笔制作自己的样本,我测了,识别率很高。

 

总结:

1、尽量模仿西方数字的书写,书写的位置尽量位与28*28的中央,建议用photoshop的柔性画笔书写。

2、小心你的图片预处理过程,这可能是你识别率低的罪魁祸首

3、你可以把所有的训练图片处理成2值图,然后给模型训练,测试图片也用2值图,就是只有01,没有0~1之间的任何数,避免了图片预处理导致的识别率下降,识别率会极大提升。

 

 

 

 

这篇关于Mnist模型识别自己手写数字正确率低的原因的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/219798

相关文章

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

IDEA中Maven Dependencies出现红色波浪线的原因及解决方法

《IDEA中MavenDependencies出现红色波浪线的原因及解决方法》在使用IntelliJIDEA开发Java项目时,尤其是基于Maven的项目,您可能会遇到MavenDependenci... 目录一、问题概述二、解决步骤2.1 检查 Maven 配置2.2 更新 Maven 项目2.3 清理本

Python验证码识别方式(使用pytesseract库)

《Python验证码识别方式(使用pytesseract库)》:本文主要介绍Python验证码识别方式(使用pytesseract库),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1、安装Tesseract-OCR2、在python中使用3、本地图片识别4、结合playwrigh

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

IDEA下"File is read-only"可能原因分析及"找不到或无法加载主类"的问题

《IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题》:本文主要介绍IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题,具有很好的参... 目录1.File is read-only”可能原因2.“找不到或无法加载主类”问题的解决总结1.File