【机器学习】手写数字识别的最优解:CNN+Softmax、Sigmoid与SVM的对比实战

一、基于CNN+Softmax函数进行分类

1数据集准备

2模型设计

3模型训练

4模型评估

5结果分析

二、 基于CNN+sigmoid函数进行分类

1数据集准备

2模型设计

3模型训练

4模型评估

5结果分析

三、 基于CNN+SVM进行分类

1数据集准备

2模型设计

3模型训练

4模型评估

5结果分析

四、 基于svm对MNIST进行分类

1 数据集准备

2 数据预处理

3 模型训练

4 模型评估

5 结果可视化

6 总结与展望

五、 总结


一、基于CNN+Softmax函数进行分类

本扩展实验旨在通过构建卷积神经网络(CNN)结合Softmax分类器的方式,对MNIST数据集进行手写数字识别任务,探索不同训练参数对模型性能的影响,并最终验证CNN+Softmax在手写数字分类问题中的有效性。以下是实验的具体步骤与过程描述。

1数据集准备

本实验使用MNIST数据集的简化版本,包含1797张8×8像素的灰度图像,分为10个类别(数字0到9)。为了确保数据分布均匀,我按照80%的比例随机划分数据为训练集,20%为测试集。

在数据预处理过程中,我首先对每张图像进行了标准化,将每个像素值缩放至零均值和单位方差的分布,这有助于提高模型训练的稳定性和收敛速度。随后,将每张图像从一维向量格式(64维)重塑为二维张量格式(1×8×8),以满足卷积神经网络的输入要求。此外,为避免数据顺序对模型训练的影响,我在训练开始前对数据进行了随机打乱操作。

2模型设计

本实验构建的卷积神经网络由两层卷积层和两层全连接层组成。第一层卷积操作通过16个3×3的卷积核提取图像的初级特征,激活函数采用ReLU,并结合批归一化和最大池化操作,减小特征图尺寸。第二层卷积层在第一层的基础上进一步提取高级特征,输出32个特征图。

卷积层输出的特征图经过展平操作后输入到全连接层。隐藏层由128个神经元组成,使用ReLU激活函数捕捉特征之间的非线性关系,并结合Dropout操作减少过拟合风险。最终输出层采用Softmax激活函数,将提取的特征映射到10个类别的概率分布。

3模型训练

模型训练过程中,我选取以下三组超参数进行实验对比:

  • 学习率:0.0001和0.00001。
  • 批量大小:16和32。
  • 训练轮数:30和50。

训练时,采用交叉熵损失函数和Adam优化器优化模型参数。在每轮训练结束后,我记录训练损失值和测试集准确率,以评估模型的训练效果和泛化能力。

4模型评估

在训练完成后,我使用测试集对模型性能进行了评估,主要通过以下指标衡量模型的分类表现:

  1. 准确率:模型对测试集样本的总体分类准确率。
  2. 分类报告:包括精准率、召回率和F1分数,用于分析模型在各类别上的表现。

为了展示实验中不同超参数组合的性能差异,我制作了一张包含所有实验数据的结果汇总表(表1-1)以及一张训练损失曲线和测试集准确率曲线的对比图(图1-1)。

表1-1 不同参数下的训练指标

轮数

学习率

批次

数据量

准确率

精确率

召回率

F1分数

训练时间(秒)

30

0.0001

16

500

0.92

0.922435

0.913131

0.913465

3.172704

30

0.0001

16

1797

0.988889

0.989189

0.989039

0.988888

6.810793

30

0.0001

32

500

0.91

0.931758

0.908333

0.913395

1.093283

30

0.0001

32

1797

0.972222

0.972911

0.972297

0.971546

3.849656

30

1.00E-05

16

500

0.42

0.395408

0.408788

0.36996

1.910461

30

1.00E-05

16

1797

0.8

0.807025

0.797906

0.77158

6.851056

30

1.00E-05

32

500

0.19

0.182126

0.19154

0.178736

1.097944

30

1.00E-05

32

1797

0.688889

0.704355

0.687917

0.674851

3.865439

50

0.0001

16

500

0.97

0.972576

0.968889

0.969218

3.172215

50

0.0001

16

1797

0.983333

0.983542

0.98325

0.983249

11.35059

50

0.0001

32

500

0.86

0.865837

0.863914

0.86281

1.878025

50

0.0001

32

1797

0.986111

0.986253

0.986032

0.986067

6.559904

50

1.00E-05

16

500

0.53

0.533913

0.517172

0.472246

3.250488

50

1.00E-05

16

1797

0.861111

0.870307

0.860195

0.85589

11.56044

50

1.00E-05

32

500

0.32

0.3163

0.301616

0.277392

1.935893

50

1.00E-05

32

1797

0.797222

0.806196

0.796038

0.771853

6.420624

图1-1 训练损失值曲线对比(左)和测试集准确率曲线对比(右)

5结果分析

从表1-1和图1-1可以看出,不同超参数组合对模型性能有显著影响。较大的学习率(如0.0001)在训练初期能够加速收敛,但由于梯度波动较大,在训练后期容易导致损失值震荡,限制测试集准确率的进一步提升;而较小的学习率(如0.00001)尽管收敛速度较慢,但更稳定,能够有效降低损失值,并在训练后期取得更高的测试集准确率。此外,批量大小对模型的稳定性和泛化能力也起到了关键作用。较大的批量大小(如 2)在训练过程中展现了平滑的损失曲线,有助于模型更快地找到全局最优解,但较小的批量大小(如16)由于引入了更多的梯度波动,在某些实验中表现出了更优的泛化性能。训练轮数的增加同样对模型性能有重要影响,当训练轮数从 30 增加到 50 时,大多数参数组合下的测试集准确率明显提高,显示出更充分的特征学习效果。然而,在部分组合(例如较大的学习率)中,增加训练轮数可能导致过拟合,表现为训练集损失持续下降,而测试集准确率停滞甚至略有下降。综合分析,较小的学习率、适中的批量大小以及合理的训练轮数可以共同优化模型的收敛速度和泛化性能,为实现最佳分类效果提供了有力支持,其中分类最好的就是参数为轮数30,学习率0.0001,批次16,数据量1797,这样训练下来的模型的准确率98.89%,精确率为98.92%,召回率为98.90%,F1分数为98.89%。

二、 基于CNN+sigmoid函数进行分类

本扩展实验采用卷积神经网络(CNN)结合Sigmoid激活函数,针对MNIST数据集中的手写数字进行二分类任务。具体而言,每次训练一个模型以区分目标数字与非目标数字,以数字9为例,正类为数字9的样本,负类为非数字9的样本。以下是实验的具体描述。

1数据集准备

MNIST数据集包含1797张8×8像素的灰度图像,每张图像对应一个手写数字(0到9)。在本实验中,我们选择了所有数字9的样本作为正类,其余数字(0到8)的样本作为负类。

(1)数据划分:数据集按照80%的比例作为训练集,20%作为测试集。在划分时确保类别分布的平衡,即正类和负类样本在训练集和测试集中的比例与原始数据一致。

(2)数据预处理:为提高模型训练的效率,所有数据均进行了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宸码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值