首页 > 其他分享 >PaddlePaddle 实现手写数字识别

PaddlePaddle 实现手写数字识别

时间:2022-12-21 12:39:43浏览次数:64  
标签:img 卷积 PaddlePaddle fluid label reader test 手写 识别


PaddlePaddle 实现手写数字识别

在这次实验中我们将使用 PaddlePaddle 来实现三种不同的分类器,用于识别手写数字。三种分类器所基于的模型分别为 Softmax 回归、多层感知器、卷积神经网络。现在让我们进入实验来看看基于不同模型的分类器的差异吧!

您将学会

  • 实现一个基于Softmax回归的分类器,用于识别手写数字
  • 实现一个基于多层感知器的分类器,用于识别手写数字
  • 实现一个基于卷积神经网络的分类器,用于识别手写数字
  • 卷积神经网络的基本组成和搭建

现在让我们进入实验吧!

1 - 引用库

首先,载入几个需要用到的库,它们分别是:

  • numpy:一个python的基本库,用于科学计算
  • paddle.fluid:PaddlePaddle深度学习框架
  • PIL:Python上的图像处理标准库
  • os:在本例中用于获取文件或目录的路径
  • Image:用于处理图像数据
  • from paddle.utils.plot import Ploter :paddle集成了一个画图工具包,我们可以利用这个包把训练曲线画出来
from __future__ import print_function
import os
from PIL import Image
import matplotlib.pyplot as plt #plt 用于显示图片
import numpy
import paddle
import paddle.fluid as fluid
from paddle.utils.plot import Ploter
%matplotlib inline

问题描述:

当我们学习编程的时候,编写的第一个程序一般是实现打印"Hello World"。而机器学习(或深度学习)的入门教程,一般都是 ​​MNIST​​ 数据库上的手写数字识别问题。原因是手写数字识别属于典型的图像分类问题,比较简单,同时MNIST数据集也很完备。

你的目标:

构建三种不同的分类器来对手写数字进行识别

数据集分析:

MNIST 数据集作为一个简单的计算机视觉数据集,包含一系列如图1所示的手写数字图片和对应的标签。图片是 28x28 像素的矩阵,标签则对应着0~9的10个数字。每张图片都经过了大小归一化和居中处理。

PaddlePaddle 实现手写数字识别_数据集

MNIST数据集是从 ​​NIST​​ 的Special Database 3(SD-3)和Special Database 1(SD-1)构建而来。由于SD-3是由美国人口调查局的员工进行标注,SD-1是由美国高中生进行标注,因此SD-3比SD-1更干净也更容易识别。Yann LeCun等人从SD-1和SD-3中各取一半作为MNIST的训练集(60000条数据)和测试集(10000条数据),其中训练集来自250位不同的标注员,此外还保证了训练集和测试集的标注员是不完全相同的。

Yann LeCun早先在手写字符识别上做了很多研究,并在研究过程中提出了卷积神经网络(Convolutional Neural Network),大幅度地提高了手写字符的识别能力,也因此成为了深度学习领域的奠基人之一。如今的深度学习领域,卷积神经网络占据了至关重要的地位,从最早Yann LeCun提出的简单LeNet,到如今ImageNet大赛上的优胜模型VGGNet、GoogLeNet、ResNet等(请参见​​图像分类​​ 教程),人们在图像分类领域,利用卷积神经网络得到了一系列惊人的结果。

有很多算法在 MNIST 上进行实验。1998年,LeCun 分别用单层线性分类器、多层感知器(Multilayer Perceptron, MLP)和多层卷积神经网络LeNet进行实验,使得测试集上的误差不断下降(从12%下降到0.7%)[​​1​​]。此后,科学家们又基于K近邻(K-Nearest Neighbors)算法[​​2​​]、支持向量机(SVM)[​​3​​]、神经网络[​​4-7​​]和Boosting方法[​​8​​]等做了大量实验,并采用多种预处理方法(如去除歪曲、去噪、模糊等)来提高识别的准确率。

本教程中,我们从简单的模型 Softmax 回归开始,带大家入门手写数字识别,并逐步进行模型优化。

输入值:

相关文章