图像识别:

 图像识别(Image Recognition)是指利用计算机对图像进行处理、分析 和理解,以识别各种不同模式的目标和对像的技术。

 图像识别的发展经历了三个阶段:文字识别、数字图像处理与识别、物体 识别。机器学习领域一般将此类识别问题转化为分类问题。

手写识别:

 手写识别是常见的图像识别任务。计算机通过手写体图片来识别出图片 中的字,与印刷字体不同的是,不同人的手写体风格迥异,大小不一, 造成了计算机对手写识别任务的一些困难。

 数字手写体识别由于其有限的类别 (0~9共10个数字)成为了相对简单 的手写识别任务。DBRHD 和 MNIST 是常用的两个数字手写识别数据集。

MNIST数据集:

MNIST的下载链接:http://yann.lecun.com/exdb/mnist/。

MNIST是一个包含数字0~9的手写体图片数据集,图片已归一化为以手写数 字为中心的28*28规格的图片。MNIST由训练集与测试集两个部分组成,各部分 规模如下:

 训练集:60,000个手写体图片及对应标签  测试集:10,000个手写体图片及对应标签

MNIST数据集的手写数字样例:
 MNIST数据集中的每一个图片由28*28个像素点组成
 每个像素点的值区间为0~255,
0表示白色,255表示黑色。

DBRHD数据集:

DBRHD(Pen-Based Recognition of Handwritten Digits Data Set)是UCI的机器 学习中心提供的数字手写体数据库: https://archive.ics.uci.edu/ml/datasets/Pen-
Based+Recognition+of+Handwritten+Digits。

DBRHD数据集包含大量的数字0~9的手写体图片,这些图片来源于44位不同的人的手 写数字,图片已归一化为以手写数字为中心的32*32规格的图片。DBRHD的训练集与测试 集组成如下:

 训练集 :7,494个手写体图片及对应标签,来源于40位手写者  测试集:3,498个手写体图片及对应标签,来源于14位手写者

DBRHD数据集特点:

 去掉了图片颜色等复杂因素,将手写体数字图片转化为训 练数据为大小32*32的文本, 矩阵空白区域使用0代表,字迹区域使用1表示。

已有许多模型在 MNIST 或 DBRHD 数据集上进行了实验,有些模型对数据集进行了偏斜 矫正,甚至在数据集上进行了人为的扭曲、偏移、缩放及失真等操作以获取更加多样性的 样本,使得模型更具有泛化性。
 常用于数字手写体的分类器

1) 线性分类器
3) Boosted Stumps
5) SVM
2) K最近邻分类器 4) 非线性分类器 6) 多层感知器
7) 卷积神经网络

 后续任务:利用全连接的神经网络实现手写识别的任务

神经网络实现“手写识别”

任务介绍

手写数字识别是一个多分类问题,共有 10 个分类,每个手写数字图像的 类别标签是 0~9 中的其中一个数。例如下面这三张图片的标签分别是 0,1, 2。

任务:利用 sklearn 来训练一个简单的全连接神经网络,即多层感知机 (Multilayer perceptron,MLP)用于识别数据集 DBRHD 的手写数字。

MLP的输入

 DBRHD数据集的每个图片是一个由0 或1组成的32*32的文本矩阵;
 多层感知机的输入为图片矩阵展开的 1*1024个神经元。

MLP的输出

MLP输出:“one-hot vectors”
 一个 one-hot 向量除了某一位的数字是1以外其余各维度数字都是0。
 图片标签将表示成一个只有在第n维度(从0开始)数字为1的10维向量。
比如,标签0将表示成[1,0,0,0,0,0,0,0,0,0,0]。即,MLP输出层具有10 个神经元。

MLP结构

 MLP的输入与输出层,中间隐藏层 的层数和神经元的个数设置都将 影响该MLP模型的准确率。

 在本实例中,我们只设置一层隐 藏层,在后续实验中比较该隐藏 层神经元个数为50、100、200时 的MLP效果。

MLP手写识别实例构建

本实例的构建步骤如下:
 步骤1:建立工程并导入sklearn包  步骤2:加载训练数据
 步骤3:训练神经网络
 步骤4:测试集评价

代码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun May 28 20:12:45 2017@author: xiaolian
"""import numpy as np #
from os import listdir #
from sklearn.neural_network import MLPClassifierdef img2vector(filename):retMat = np.zeros([1024], int)fr = open(filename)lines = fr.readlines()for i in range(32):for j in range(32):retMat[i*32 + j] = lines[i][j]return retMatdef readDataSet(path):fileList = listdir(path)numFiles = len(fileList)dataSet = np.zeros([numFiles, 1024], int)labels = np.zeros([numFiles, 10])for i in range(numFiles):filePath = fileList[i]digit = int(filePath.split('_')[0])labels[i][digit] = 1.0dataSet[i] = img2vector(path + '/' + filePath)return dataSet, labelstrain_dataSet, train_labels = readDataSet('trainingDigits')clf = MLPClassifier(hidden_layer_sizes = (1000,), activation = 'logistic', solver = 'adam', learning_rate_init = 0.0001, max_iter = 2000)clf.fit(train_dataSet, train_labels)dataSet, labels = readDataSet('testDigits')res = clf.predict(dataSet)print(res)error_num = 0num = len(dataSet)for i in range(num):if np.sum(res[i] == labels[i]) < 10:error_num += 1print( 'total num : ', num, 'error num:', error_num, 'erroe_rate :', error_num / float(num) )

KNN实现“手写识别”

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon May 29 06:53:31 2017@author: xiaolian
"""import numpy as np
from os import listdir
from sklearn import neighborsdef img2vector(filename):retMat = np.zeros([1024], int)fr = open(filename)lines = fr.readlines()for i in range(32):for j in range(32):retMat[i * 32 + j] = lines[i][j]return retMatdef readDataSet(path):filelist = listdir(path)numfiles = len(filelist)dataSet = np.zeros([numfiles, 1024],int)labels = np.zeros([numfiles])for i in range(numfiles):filepath = filelist[i]digit = int(filepath.split('_')[0])labels[i] = digitdataSet[i] = img2vector(path + '/' + filepath)return dataSet, labelstrain_dataset, train_labels = readDataSet('trainingDigits')knn = neighbors.KNeighborsClassifier(algorithm = 'kd_tree', n_neighbors = 3)knn.fit(train_dataset, train_labels)dataset, labels = readDataSet('testDigits')res = knn.predict(dataSet)error_num = np.sum(res != labels)num = len(dataset)print('total num:', num, 'wrong num:', error_num, 'wrongrate :',error_num / float(num))

“手写识别”实例介绍相关推荐

  1. python程序实例源代码-Python 神经网络手写识别实例源码

    深度学习和神经网络对很多初学者来说都是摸不着头脑,今天分享一个完整的手写识别的实例,学习和理解了这个实例代码和过程就基本上掌握了神经网络. 1.构建神经网络类 network_claas.py #!/ ...

  2. Tensorflow之基于MNIST手写识别的入门介绍

    Tensorflow是当下AI热潮下,最为受欢迎的开源框架.无论是从Github上的fork数量还是star数量,还是从支持的语音,开发资料,社区活跃度等多方面,他当之为superstar. 在前面介 ...

  3. Qt之手写识别开发笔记:Zinnia介绍、编译、使用以及Demo

    若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...

  4. 手写体数字图像识别图像_手写识别调整笔画大小而不是图像

    手写体数字图像识别图像 A straightforward algorithm to dealing with handwritten symbol recognition problems in M ...

  5. python简单代码演示效果-10分钟教你用python 30行代码搞定简单手写识别!

    欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 手写笔记还是电子笔记好呢? 毕业季刚结束,眼瞅着2018级小萌新马上就要来了,老腊肉小编为了咱学弟学妹们的学习,绞尽脑汁准备编一套大学秘籍, ...

  6. AI应用开发实战 - 手写识别应用入门

    AI应用开发实战 - 手写识别应用入门 手写体识别的应用已经非常流行了,如输入法,图片中的文字识别等.但对于大多数开发人员来说,如何实现这样的一个应用,还是会感觉无从下手.本文从简单的MNIST训练出 ...

  7. AI应用开发实战系列之三:手写识别应用入门

    AI应用开发实战 - 手写识别应用入门 手写体识别的应用已经非常流行了,如输入法,图片中的文字识别等.但对于大多数开发人员来说,如何实现这样的一个应用,还是会感觉无从下手.本文从简单的MNIST训练出 ...

  8. 最终章 | TensorFlow战Kaggle“手写识别达成99%准确率

    刘颖,某互联网创业公司COO,技术出身,做产品里最懂运营的. 这是一个TensorFlow的系列文章,本文是第三篇,在这个系列中,你讲了解到机器学习的一些基本概念.TensorFlow的使用,并能实际 ...

  9. cnn神经网络可以用于数据拟合吗_使用Keras搭建卷积神经网络进行手写识别的入门(包含代码解读)...

    本文是发在Medium上的一篇博客:<Handwritten Equation Solver using Convolutional Neural Network>.本文是原文的翻译.这篇 ...

最新文章

  1. java Excel 导入 IllegalStateException 异常处理 不同的数据类型
  2. 微软为其虚拟机更新Linux支持
  3. Events are a bad idea?
  4. Android 面试 - 动画
  5. 仿生蛇类机器人 特点_今日项目:功能表面仿生激光强化及其修复再造技术
  6. 你的密码已泄露!使用C#阻止弱密码
  7. 管理活动目录域服务实训_管理学院学生党支部开展实践教育基地服务活动
  8. Python中xrange和range异同
  9. pandas的自带数据集_pandas.DataFrame.sample随机抽样
  10. Linux下的 【pwd】 命令; 显示当前目录全路径。
  11. SQL Server 2008,三年等待物有所值
  12. ---Ubuntu 下安装oracle Java
  13. 瑞星2008序列号正确号码
  14. Spotfire 对条形图中分组后的值排序
  15. 淘宝优惠券去哪里领?
  16. 看看最新的考试 c语言 noip模拟 纯llq原创作品
  17. 【论文笔记】Self-paced Contrastive Learning with Hybrid Memory for Domain Adaptive Object Re-ID
  18. ios 拍照人像识别_Google相册为iOS用户添加了人像深度编辑和色彩弹出功能
  19. JavaScript面试问题:事件委托和this
  20. iReport制作报表

热门文章

  1. 中国最高法院承认区块链证据具有法律效力
  2. 时光倒流60年,重返少年时代
  3. 如何判断几个向量是否线性无关
  4. Eclipse下NDK开发与调试
  5. 2022年全球与中国晶圆级光学元件市场现状及未来发展趋势
  6. 1-100猜数字游戏
  7. BDG邦德外汇:如何让自己成为赚钱高手
  8. 深入理解mysql之BDB系列(1)---BDB相关基础知识
  9. 如何选用加速度传感器
  10. RS485通讯---Modbus数据链路层与应用层(二)