卷积和全连接神经网络实现手写数字识别 本文档介绍了使用卷积神经网络和全连接神经网络实现手写数字识别的方法。文档中首先介绍了实验的内容和实验原理,然后详细讲解了全连接神经网络和卷积神经网络的原理和结构。文档还提供了实验步骤,指导读者如何使用 Keras 实现手写数字识别。 一、实验内容 本实验的目的是使用 Keras 实现手写数字识别。实验中,我们将使用 MNIST 数据集,该数据集包含 60000 张手写数字图片,每张图片的大小是 28x28 个像素点。我们将使用全连接神经网络和卷积神经网络两种方法来实现手写数字识别。 二、实验原理 ### 2.1 数据集 MNIST 数据集是手写数字识别的常用数据集。每张图片由 28x28 个像素点构成,每个像素点用一个灰度值表示。可以将这 28x28 个像素展开为一个一维的行向量,作为输入,也就是有 784x1 的向量。 ### 2.2 神经元 人工神经网络(ANN,Artificial Neuron Network)是模拟生物大脑的神经网络结构,它是由许多称为人工神经细胞(Artificial Neuron,也称人工神经元)的细小结构单元组成。简易模型如下所示: x1 … xn:表示神经细胞的输入,也就是输入神经细胞的信号。 w1 … wn:表示每个输入的权重,就好比生物神经网络中每个轴突和树突的连接的粗细,强弱的差异。 b:偏置权重 threshold:偏置(可以将 threshold * b 看作是前面提到的生物神经细胞的阈值) 蓝色部分:细胞体。 黄色球形是所有输入信号以的求和。 红色部分是表示求和之后的信号的激励函数(即达到阈值就处于兴奋状态,反之抑制,当然作为人工神经细胞,其激励函数很多,阶跃(型)激励函数,sigmoid(s 型)激励函数,双曲正切(tanh)激励函数,ReLu(Rectified Linear Units)激励函数等等) ### 2.3 全连接神经网络 全连接神经网络模型是一种多层感知机(MLP),感知机的原理是寻找类别间最合理、最具有鲁棒性的超平面,感知机最具代表的是 SVM 支持向量机算法。神经网络同时借鉴了感知机和仿生学,神经元接受一个信号后会发送各个神经元,各个神经元接受输入后根据自身判断,激活产生输出信号后汇总从而实现对信息源实现识别、分类。 包含两个隐藏层的神经元网络结构如下: 每个结点和下一层所有几点都有运算关系,实践中全连接神经网络通常有多个隐藏层,增加隐藏层可以更好的分离数据的特征,但过多的隐藏层也会增加训练时间以及会产生过拟合。 训练神经网络中需要使用 bp 算法,先是通过前向传播,得到预测结果,再反向传播去调整模型权重。反向传播:反向传播根据前向传播产生的损失函数值,沿输出端向至输入端优化每层之间参数,在此过程中运算利用梯度下降法优化参数,神经网络求解参数本质上仍然是规则中求最优解问题,现在的机器学习框架如 Tensorflow、pytorch、keras 将梯度下降法、Booting、Bagging 这些优化中常用技巧封装起来,我们只用关注数据建模即可。 ### 2.4 卷积神经网络 卷积神经网络可以利用空间结构关系减少需要学习的参数量,提高反向传播算法的训练效率。一般的 CNN 有多个卷积层构成,每个卷积层会进行如下操作: 图像通过多个不同的卷积核的滤波,并加偏置(bias),提取出局部特征,每一个卷积核会映射出一个新的 2D 图像。将前面卷积核的滤波输出结果进行非线性的激活函数处理。对激活函数的结果再进行池化操作(即降采样),目前一般是使用最大池化,保留最显著的特征,并提升模型的畸变容忍能力。 这几个步骤就构成最常见的卷积层,当然也可以在加上一个 LRN 层(Local Response Normalization,局部响应归一化层)。 CNN 的要点是卷积核的权值共享(Weight Sharing)、局部连接模式(Local Connection)和池化层(Pooling)中的降采样(Down-Sampling)。局部连接和权值共享降低了参数量,使训练复杂度大大下降,减轻过拟合并降低计算量。同时权值共享还赋予了 CNN 对平移的容忍性,而池化层降采样则进一步降低了输出层参数,并赋予模型轻度形变的容忍性,提高模型的泛化能力。 每个卷基层包含三个部分:卷积、池化和非线性激活函数使用卷积提取空间特征降采样的平均池化层、双曲正切或 S 型的激活函数、MLP 作为最后的分类器层与层之间的稀疏连接减少计算复杂度。 三、实验步骤 ### 3.1 全连接神经网络实现 1. 获取数据集 Keras 中集成了 MNIST 数据集,直接从其中导入数据,并对数据进行整理。从之可以看出,数据为 28*28,一共 60000 张。 2. 对数据集中的数据进行可视化 3. 对数据进行维度转换把每一张 28 x 28 的图片分别转为长度为 784 的向量,再合并成一个大的像素矩阵,每个维度表示一个像素点的灰度值/255。 4. 对输出结果进行格式转化将经过神经网络训练完后的内容,转化为 10 个类别的概率分布。 本文档介绍了使用卷积神经网络和全连接神经网络实现手写数字识别的方法。使用 Keras 实现手写数字识别可以使用 MNIST 数据集,并使用全连接神经网络和卷积神经网络两种方法来实现手写数字识别。
1
基于Python实现手写数字识别的KNN算法实例
2024-05-22 17:52:20 39KB python 手写数字
1
pytorch实战 # 基于pytorch搭建CNN实现手写数字识别介绍 本文将介绍如何使用pytorch搭建卷积神经网络(CNN)来实现手写数字识别。手写数字识别是计算机视觉领域的一个重要应用场景,它可以被广泛应用于自然语言处理、图像处理等多个领域。本文将会讲解CNN的原理、pytorch的基本使用方法以及如何利用pytorch搭建一个简单的手写数字识别模型。希望本文能够帮助读者更好地理解CNN和pytorch,并且能够搭建出自己的手写数字识别模型。 ## CNN的原理 卷积神经网络(CNN)是一种深度学习的神经网络结构,它能够有效地解决图像、语音和自然语言等领域的问题。CNN的核心思想是利用卷积操作和池化操作来提取图像特征,从而实现对图像的分类、识别等任务。CNN主要由卷积层、池化层和全连接层三部分组成。卷积层用于提取图像的特征,池化层用于降低特征的维度,全连接层用于对特征进行分类或者回归。 ## pytorch的基本使用方法 pytorch是一个基于python的深度学习框架,它提供了丰富的API来方便我们进行深度学习模型的搭建和训练。使用pytorch可以帮助我们更加
2023-11-18 17:04:17 289KB pytorch pytorch
1
STM32 MPU6050 OLED实现手环记步功能 Flash实现掉电保存
2023-04-06 15:48:00 15.34MB stm32 arm 嵌入式硬件 单片机
1
先用最简单的三层全连接神经网络,然后添加激活层查看实验结果,最后加上批标准化验证是否有效 首先根据已有的模板定义网络结构SimpleNet,命名为net.py import torch from torch.autograd import Variable import numpy as np import matplotlib.pyplot as plt from torch import nn,optim from torch.utils.data import DataLoader from torchvision import datasets,transforms #定义三层全连接
2023-02-19 20:35:33 92KB c label OR
1
生成对抗网络实现手写数字生成
2022-12-15 11:28:33 36.45MB GAN
1
深度学习作业_基于pytorch框架python实现手写数字识别完整源码+代码注释+实验报告.zip 使用MNIST手写数字体数据集进行训练和预测,实现测试集准确率达到98%及以上。本实验的目的: 掌握卷积神经网络基本原理,以LeNet为例 掌握主流框架的基本用法以及构建卷积神经网络的基本操作 了解如何使用GPU
卷积神经网络实现手写数字识别
2022-10-21 09:50:02 106KB 卷积神经网络
1
【手写数字识别】基于Fisher分类实现手写数字识别附matlab代码
2022-10-19 20:09:12 892KB
1
K-NN(K近邻算法)实现手写字符的识别(C语言)实现,通过VS2010平台验证通过,代码详细易懂,是该算法上手的好资料.
2022-09-27 08:30:55 1.04MB KNN k近邻算法 机器学习 数据挖掘
1