基于Tensorflow+MNIST数据集训练LeNet

本文介绍了基于Tensorflow的LeNet模型训练过程,用于MNIST手写数字识别。详细讲解了LeNet的网络结构,包括卷积层、池化层和全连接层。MNIST数据集包含6万训练图片和1万测试图片,CNN在此任务上能实现96%以上的准确率。实验代码展示了如何从数据包和读取图像进行训练,并给出了极端情况下的识别效果分析。
摘要由CSDN通过智能技术生成

LeNet原理简介

在这里插入图片描述
LeNet是卷积神经网络的祖师爷LeCun在1998年提出,用于解决手写数字识别的视觉任务。自那时起,CNN的最基本的架构就定下来了:卷积层、池化层、全连接层。如今各大深度学习框架中所使用的LeNet都是简化改进过的LeNet-5(-5表示具有5个层),和原始的LeNet有些许不同,比如把激活函数改为了现在很常用的ReLu。
LeNet-5跟现有的conv->pool->ReLU的套路不同,它使用的方式是conv1->pool->conv2->pool2再接全连接层,但是不变的是,卷积层后紧接池化层的模式依旧不变。
在这里插入图片描述

  1. 首先输入图像是单通道的28*28大小的图像,用矩阵表示就是[1,28,28]
  2. 第一个卷积层conv1所用的卷积核尺寸为5*5,滑动步长为1,卷积核数目为20,那么经过该层后图像尺寸变为24,28-5+1=24,输出矩阵为[20,24,24]。
  3. 第一个池化层pool核尺寸为2*2,步长2,这是没有重叠的max pooling,池化操作后,图像尺寸减半,变为12×12,输出矩阵为[20,12,12]。
  4. . 第二个卷积层conv2的卷积核尺寸为5*5,步长1,卷积核数目为50,卷积后图像尺寸变为8,这是因为12-5+1=8,输出矩阵为[50,8,8].
  5. 第二个池化层pool2核尺寸为2*2,步长2,这是没有重叠的max pooling,池化操作后,图像尺寸减半,变为4×4,输出矩阵为[50,4,4]。
  6. pool2后面接全连接层fc1,神经元数目为500,再接relu激活函数。
  7. 再接fc2,神经元个数为10,得到10维的特征向量,用于10个数字的分类训练,送入softmax分类,得到分类结果的概率output。

卷积:用一个可训练的滤波器fx去卷积一个输入的图像(第一阶段是输入的图像,后面的阶段就是卷积特征map),然后加一个偏置bx,得到卷积层Cx。

子采样:邻域四个像素求和变为一个像素,然后通过标量W加权,再增加偏置b,然后通过一个激活函数,产生一个缩小四倍的特征映射图Sx+1。

参考:https://www.cnblogs.com/skyfsm/p/8451834.html

MNIST数据集

MNIST手写体数字集是深度学习的经典入门实例,由6万张训练图片和1万张测试图片构成的,每张图片都是28 * 28大小,这些图片是采集的不同的人手写从0到9的数字,下载官网就是LeCun的网站:http://yann.lecun.com/exdb/mnist/
在这里插入图片描述
其中有着各种各样连人眼都难以正确识别的手写数字
例如,部分缺失的“8”和“9”:
在这里插入图片描述 在这里插入图片描述
书写不规则的“5”和“3”:
在这里插入图片描述 在这里插入图片描述
写的变形到旋转了的“6”(是不是也像缺失下半部分的”4“):
在这里插入图片描述
因书写习惯导致会错分的“1”和“7”:
在这里插入图片描述 在这里插入图片描述
或许放大后截图会让人有种这不难区分的错觉,但实际上它们在数据集中都只有28 * 28的分辨率,我们现在在触控屏上的手写操控感都和日常写字有很大差别,容易导致字体变形,更不用说因为书写习惯导致的难以区分,而CNN却能够高达96%以上的准确率,实在是令人惊叹。

实验代码

Tensorflow有GPU和CPU两个版本,我采用的是CPU版
安装时可直接用pip指令:pip install tensorflow

这里有两种方式训练网络,分别从数据包和读取每幅图像来训练

trainMnistFromPackage.py

import tensorflow as tf
import numpy as np # 习惯加上这句,但这边没有用到
from tensorflow.examples.tutorials.mnist import input_data
import matplotlib.pyplot as plt
mnist = input_data.read_data_sets('MNIST_data/', one_hot=True)

ses
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值