基于CNN的手写数字识别算法

内容介绍

卷积神经网络(Convolutional Neural Network,CNN)
在这里插入图片描述
卷积神经网络相较于传统的图像处理算法的优点之一在于避免了对图像复杂的前期预处理过程,卷积神经网络可以直接输入原始图像进行一系列工作,从而提供了一个端到端的解决方案。

在这里插入图片描述
根据实际问题构造出网络结构,参数的确定则需要通过训练样本和学习算法来迭代找到最优参数组。
在这里插入图片描述
参数的优化过程旨在通过对神经网络中的可变参数进行调整,使得网络输出尽可能的接近期望输出。

算法原理

卷积神经网络结构一般是由输入层、多个交替的卷积层和池化层、全连接层,以及输出层组成。
在这里插入图片描述
卷积神经网络之训练算法:

  1. 确定网络模型 ;
  2. 初始化权重参数;
  3. 对于每个样例,执行以下步骤直到收敛:
  • 计算模型输出:forward propagation(前向传播)
  • 计算代价函数:比较模型输出与真实输出的差距
  • 更新权重参数:back propagation(反向传播)
    在这里插入图片描述
    反向传播算法的核心是梯度下降算法。梯度下降算法会迭代式更新网络参数,不断沿着梯度的反方向让参数朝着总损失更小的方向更新使目标函数最小化 。
    在这里插入图片描述
    网络参数的优化分为两个过程,首先通过前向传播算法计算得到预测值,将预测值和真实值对比得到两者之间的差距。再通过反向传播算法计算目标函数对每个参数的梯度,根据梯度和学习率使用梯度下降算法更新每一个参数。
    在这里插入图片描述
    卷积神经网络的特点:局部感知、权值共享

在这里插入图片描述

  • 局部连接是指特征层上的每个神经元的输入只与前一层的局部区域相连接。
  • 权值共享是指在每次提取特征时,卷积核的参数是固定不变的。

上述这两个特征大大减少了网络参数的数目,降低了网络模型的复杂度。

实验环境

MATLABr2018b

实验步骤

  1. 准备数据集
  2. 定义网络结构
  3. 模型训练和测试
%%准备工作空间
clc
clear all
close all

%%导入数据
digitDatasetPath = fullfile('./','/HandWrittenDataset/');
imds = imageDatastore(digitDatasetPath,...
    'IncludeSubfolders',true,'LabelSource','foldernames');%采用文件夹名称作为数据标记

%%数据集图个数
countEachLabel(imds)

numTrainFiles = 17;%每一个数字有22个样本,取17个样本作为训练数据
[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,'randomized');
%查看图片的大小
img = readimage(imds,1);
size(img)

%%定义卷积神经网络的结构
layers = [
%输入层
imageInputLayer([28 28 1])

%卷积层
convolution2dLayer(5,6,'Padding',2)
batchNormalizationLayer
reluLayer

maxPooling2dLayer(2,'stride',2)

convolution2dLayer(5,16)%卷积
batchNormalizationLayer%归一化
reluLayer%激活函数

maxPooling2dLayer(2,'stride',2)

convolution2dLayer(5,120)
batchNormalizationLayer
reluLayer

%最终层
fullyConnectedLayer(10)
softmaxLayer
classificationLayer];

%%训练神经网络

% 一、设置训练参数
options = trainingOptions('sgdm',...
    'MaxEpochs',50,...
    'ValidationData',imdsValidation,...
    'ValidationFrequency',5,...
    'Verbose',false,...
    'Plots','training-progress');%显示训练的进度

%训练神经网络,保存网络
net = trainNetwork(imdsTrain,layers,options);
save 'CSNet.mat' net

%%标记数据(文件名称方式,自行构造)
mineSet = imageDatastore('./hw22/hw22/',  'FileExtensions','.jpg',...
    'IncludeSubfolders',false);
mLabels = cell(size(mineSet.Files,1),1);
for i = 1:size(mineSet.Files,1)
[filepath,name,ext] = fileparts(char(mineSet.Files{i}));
mLabels{i,1} = char(name);
end
mLabels2 = categorical(mLabels);
mineSet.Labels = mLabels2;


%%%使用网络进行分类并计算准确性
%手写数据
YPred = classify(net,mineSet);
YValidation = mineSet.Labels;
%计算正确率
accuracy = sum(YPred == YValidation)/numel(YValidation)
%绘制预测结果
figure;
nSample = 10;
ind = randperm(size(YPred,1),nSample);
for i = 1:nSample
    
subplot(2,fix((nSample+1)/2),i)
imshow(char(mineSet.Files(ind(i))))
title(['预测:' char(YPred(ind(i)))])
if char(YPred(ind(i))) ==char(YValidation(ind(i)))
    xlabel(['真实:' char(YValidation(ind(i)))],'Color','b')
else
    xlabel(['真实:' char(YValidation(ind(i)))],'color','r')
end 

end


实验结果

在这里插入图片描述

  • 2
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 机器学习基于CNN手写数字识别是一项实验性研究,该技术可以通过训练算法和图像数据集,自动识别和分类手写数字。下面我将用300字向您介绍相关实验过程。 实验的第一步是准备数据集,可以使用MNIST数据集,该数据集包含大量手写数字图像样本。然后,我们将数据集分为训练集和测试集,用于训练和评估模型性能。 接下来,我们使用CNN模型进行手写数字识别的训练。CNN(卷积神经网络)是一种常用的深度学习模型,特别适用于图像识别。该模型可以自动提取图像中的特征,并进行分类。我们通过不断调整模型的结构和参数,让其能够更好地适应手写数字识别任务。 训练过程中,我们将训练集的图像输入到CNN模型中,模型通过反向传播算法不断调整权重和偏置,以最小化预测结果与实际标签之间的误差。随着训练的进行,模型逐渐优化,使其在测试集上的准确度得到提升。 完成训练后,我们将使用测试集对模型进行评估。通过与实际标签对比,可以计算出模型的准确率、精确度、召回率等性能指标,从而评估模型的表现。 最后,我们可以使用训练好的模型进行手写数字识别。将手写数字图像输入到模型中,模型将自动输出识别结果。 这项实验的目的是将机器学习CNN技术应用于手写数字识别,提高识别的准确度和速度。它在人工智能、图像处理等领域具有广泛的应用前景,可以为我们提供更多便利和智能化的服务。 ### 回答2: 机器学习是一种可以让计算机通过学习和训练数据来完成特定任务的方法。而基于CNN(卷积神经网络)的手写数字识别实验即利用机器学习的方法来实现对手写数字的自动识别。 首先,我们需要准备一个包含大量手写数字的数据集,这些数据集中既包含手写数字图片,也包含对应的标签。在该实验中,我们需要将每个手写数字图片与其对应的数字标签建立联系。 接下来,我们可以利用CNN模型来训练和优化识别手写数字算法CNN是一种专门应用于图像处理和识别深度学习模型。通过分析手写数字图片中不同的特征和模式,CNN可以学习到一种有效的表示手写数字的方式。 在训练过程中,我们将数据集划分为训练集和验证集,用于训练和评估模型的性能。通过迭代训练,自动调整模型的参数和权重,使其逐渐提高识别手写数字的准确率。 完成训练后,我们可以用测试集来评估模型的性能。测试集是一个模型从未见过的数据集,用于模拟实际应用场景。通过与标签比较,我们可以计算出模型在测试集上的准确率,来评判其对手写数字识别的能力。 最后,我们可以使用训练好的CNN模型来进行实际的手写数字识别。输入一张手写数字图片,经过模型的处理和分析,输出对应的数字。 综上所述,基于CNN手写数字识别实验利用机器学习的方法训练和优化模型,以实现自动识别手写数字的功能。该实验将深度学习和图像处理的技术应用于手写数字识别,具有较高的准确率和广泛的应用前景。 ### 回答3: 机器学习是一种能够通过训练模型来让计算机对数据进行自动学习的技术。基于卷积神经网络(Convolutional Neural Network,CNN)的手写数字识别机器学习的一项实验。 首先,为了进行手写数字识别实验,我们需要准备一个手写数字的数据集。这个数据集包含了许多手写数字的图片,每张图片都有对应的标签,表示图片所代表的数字。 接着,我们将利用CNN来构建一个模型。CNN是一种深度学习架构,它能够提取图像的特征并用于分类任务。CNN通常由多个卷积层、池化层和全连接层组成。在手写数字识别实验中,我们可以设计一个具有几个卷积层和全连接层的CNN模型。 然后,我们需要将数据集分为训练集和测试集。训练集用于训练模型,测试集用于评估模型的性能。在训练过程中,模型会根据训练集的数据不断调整自身的参数,以使其能够更好地对手写数字进行识别。训练的过程中需要定义损失函数和优化器来指导模型的参数更新。 训练完成后,我们将使用测试集来评估模型的性能。评估指标可以是准确率,即模型正确预测的手写数字的比例。较高的准确率表示模型对手写数字识别能力较强。 此外,为了提高模型的性能,我们还可以采取一些策略,如数据增强、超参数调节等。数据增强可以通过对训练集进行旋转、平移、缩放等操作,生成更多的训练样本,以增加模型的泛化能力。超参数调节可以通过调整模型的学习率、批大小等参数,以找到更好的模型配置。 通过这样的实验,我们可以验证基于CNN手写数字识别模型的效果,并探索机器学习在图像识别任务中的应用潜力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值