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

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

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

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

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

Softmax实现手写数字识别

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

1 简介

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

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

【深度学习】:Softmax实现手写数字识别_第1张图片

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

【深度学习】:Softmax实现手写数字识别_第2张图片

       具体计算方法可自行推导

MNIST数据集

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

2. 要求

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

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

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

3.实验结果

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

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

【深度学习】:Softmax实现手写数字识别_第3张图片

【深度学习】:Softmax实现手写数字识别_第4张图片

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

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

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

1,学习率

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

2 ,Batchsize

【深度学习】:Softmax实现手写数字识别_第9张图片

【深度学习】:Softmax实现手写数字识别_第10张图片

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

3 ,max_epoch

通过查阅资料我发现有种叫做 ( EarlyStopping ) 早停法的方法可以找到最优 max_epoch ,我在
solver.py 里面根据 trian 函数写出了 trian_EarlyStoppingfang 函数可以实现早停法,核心代码如下
【深度学习】:Softmax实现手写数字识别_第11张图片
【深度学习】:Softmax实现手写数字识别_第12张图片 其余部分和原代码一样
【深度学习】:Softmax实现手写数字识别_第13张图片
【深度学习】:Softmax实现手写数字识别_第14张图片
通过对容忍度的调整,发现等于 2 的时候也就是 2 个周期准确度没有提升 0.02 以上就停止
训练,结果最优为 0.9223(在尽量少训练时间的情况下)

你可能感兴趣的:(深度学习,深度学习,人工智能)