【深度学习】:Softmax实现手写数字识别

本文介绍了如何使用Python和numpy实现Softmax回归,处理MNIST手写数字识别任务。作者探讨了不同超参数(如学习率、Batchsize、momentum)对模型性能的影响,发现适当使用momentum和合适的学习率(如0.1)有助于提高训练效率和准确率。
摘要由CSDN通过智能技术生成

清华大学驭风计划课程链接

学堂在线 - 精品在线课程学习平台 (xuetangx.com)

代码和报告均为本人自己实现(实验满分),只展示任务实验结果,如果需要报告或者代码可以私聊博主

有任何疑问或者问题,也欢迎私信博主,大家可以相互讨论交流哟~~

Softmax实现手写数字识别

相关知识点: numpy科学计算包,如向量化操作,广播机制等

1 简介

本次案例中,你需要用python实现Softmax回归方法,用于MNIST手写数字数据集分类任务。你需要完成前向计算loss和参数更新。

你需要首先实现Softmax函数和交叉熵损失函数的计算。

image.png

在更新参数的过程中,你需要实现参数梯度的计算,并按照随机梯度下降法来更新参数。

image.png

       具体计算方法可自行推导

MNIST数据集

  MNIST手写数字数据集是机器学习领域中广泛使用的图像分类数据集。它包含60,000个训练样本和10,000个测试样本。这些数字已进行尺寸规格化,并在固定尺寸的图像中居中。每个样本都是一个784×1的矩阵,是从原始的28×28灰度图像转换而来的。MNIST中的数字范围是0到9。下面显示了一些示例。 

image.png

2. 要求

a) 记录训练和测试的准确率。画出训练损失和准确率曲线;

b) 比较使用和不使用momentum结果的不同,可以从训练时间,收敛性和准确率等方面讨论差异;

c) 调整其他超参数,如学习率,Batchsize等,观察这些超参数如何影响分类性能。写下观察结果并将这些新结果记录在报告中。

3.实验结果

a) 记录训练和测试的准确率 。 画出训练损失和准确率曲线;

     这里是使用原始提供的代码画出的图像

b) 比较使用和不使用 momentum 结果的不同, 可以从训练时间, 收敛性和准确率等方面讨论差异;

训练时间 达到相同准确率的情况下,使用动量的训练时间会更快,特别是陡峭的梯度
方向上,使得模型快速接近最优解附近。
收敛性 不管使不使用动量都可以收敛,只不过使用动量后收敛会更快。
准确率 为了看出差异我训练了 40 个周期,使用动量的优化算法有着更高的准确率,在
相同的训练周期可以看出使用了动量后准确率更高,即使在后期收敛正确率仍然有一定差距,
这说明使用动量容易跳出局部最优解。

c) 调整其他超参数 ,如学习率 ,Batchsize 等, 观察这些超参数如何影响分类性能 。

1,学习率

我把学习率分别调整为 1, 0.5, 0.1, 0.01, 0.001 这五个数值, 结果如下图所示
通过图像看出学习率为 0.1 的时候最优,拥有最高的正确率,学习率为 1 的时候发生震荡现
象,因此为 1 的时候学习率过大。当学习率为 0.001 的时候发现收敛速度过慢,可能需要更
多的迭代次数才能达到较高准确率。

2 ,Batchsize

小批量大小:
优点:小批量大小可以更频繁地更新参数,使模型更快地收敛,并且可能对小数据集更加合
适。
缺点:小批量大小可能会导致参数更新方向的噪声较大,可能使模型在训练过程中表现不稳
定,特别是在 GPU 训练时可能导致性能下降。
大批量大小:
优点:大批量大小可以减少参数更新的噪声,使参数更新更加稳定,特别是在大数据集上可
能更有效。
缺点:大批量大小可能会导致内存消耗增加,特别是在 GPU 上可能会出现内存不足的问题,
此外,可能需要更多的迭代次数才能收敛。
通过图像看出批量大小在 100 的时候结果最好
批量大小为 10 的时候震动较大,对梯度下降方向不明确
批量大小为 1000 2500 的时候,准确率上升过慢,个人认为是更新过少导致
批量大小为 500 时候也有不错的效果但是和批量大小 100 比仍然有一定差距。

3 ,max_epoch

通过查阅资料我发现有种叫做 ( EarlyStopping ) 早停法的方法可以找到最优 max_epoch ,我在
solver.py 里面根据 trian 函数写出了 trian_EarlyStoppingfang 函数可以实现早停法,核心代码如下
其余部分和原代码一样
通过对容忍度的调整,发现等于 2 的时候也就是 2 个周期准确度没有提升 0.02 以上就停止
训练,结果最优为 0.9223(在尽量少训练时间的情况下)
  • 52
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

X.AI666

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

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

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

打赏作者

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

抵扣说明:

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

余额充值