目录

1、手写数字识别问题介绍

2、手写数字的可视化

3、多层感知机

4、scikit-learn实现手写数字识别 


1、手写数字识别问题介绍

问题描述:手写数字识别是指给定一系列的手写数字图片以及对应的数字标签,构建模型进行学习,目标是对于一张新的手写数字图片能够自动识别出对应的数字。这里主要涉及到的技术是图像识别,图像识别是指利用计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对像的技术。机器学习领域一般将此类识别问题转化为分类问题。手写数字识别可以转化为10分类问题,最终结果只能是0-9这10个数字。

网上手写数字数据集很多,大小也存在差异。这里使用Scikit-learn库中自带的手写数字数据集,其中包含1797个手写数字样本,每个样本是一张8*8的图片,用包含64个元素的一维数组表示,数组元素为0-16之间的整数,表示颜色信息。每个样本都有对应的标签,标签为0-9之间的整数

2、手写数字的可视化

获取手写数字数据集并显示前36个样本图片的关键代码如下:

机器学习多种方法实现手写数字识别 手写数字识别的应用_python

数据集中前36个样本显示效果如图所示。由于图片比较小,所以有些马赛克的效果。

机器学习多种方法实现手写数字识别 手写数字识别的应用_python_02

3、多层感知机

多层感知机人工神经网络)是指含有至少一个隐藏层的由全连接层组成的神经网络,其中每一个隐藏层的输出都会通过激活函数进行变换。多层感知机的层数隐藏层的大小、激活函数都是超参数,可以自己设定。

机器学习多种方法实现手写数字识别 手写数字识别的应用_机器学习_03

  1. 参数:各个层之间的连接权重以及偏置;
  2. 目标:使得误差最小,是一个最优化问题;
  3. 方法:梯度下降法等;
  4. 过程:首先随机初始化所有参数,然后迭代地训练,不断地计算梯度和更新参数,直到满足某个条件为止(比如误差足够小迭代次数足够多)。这个过程涉及到代价函数规则化学习速率梯度计算等。

为什么需要激活函数? 如果不用激活函数,无论神经网络有多少层,输出都是输入的线性组合,这样网络的逼近能力十分有限。引入非线性函数作为激励函数,这样深层神经网络表达能力更强,几乎可以逼近任意函数。

机器学习多种方法实现手写数字识别 手写数字识别的应用_编程语言_04

4、scikit-learn实现手写数字识别 

机器学习多种方法实现手写数字识别 手写数字识别的应用_python_05

MLPClassifier 默认隐藏层神经元为100个激活函数为relu。改变这两个参数(hidden_layer_sizesactivation),观察执行结果。