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

Softmax实现手写数字识别

1 简介

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

前向传播算法中,你需要实现Softmax函数和交叉熵损失函数的计算。

       反向传播算法中,你需要实现参数梯度、局部敏感度的计算,并按照随机梯度下降法来更新参数。

       具体计算方法可自行推导,或参照第三章课件。

 

2 MNIST数据集

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

3 任务要求

代码清单

a)        data/ 文件夹:存放MNIST数据集。你需要下载数据,解压后存放于该文件夹下。下载链接见文末,解压后的数据为 *ubyte 形式;

b)        solver.py 这个文件中实现了训练和测试的流程。建议从这个文件开始阅读代码;

c)        network.py 实现了网络模块,可在定义网络体系结构和进行模型训练时使用;

d)        dataloader.py 实现了数据加载器,可用于准备数据以进行训练和测试;

e)        visualize.py 实现了plot_loss_and_acc函数,该函数可用于绘制损失和准确率曲线;

f)         optimizer.py 你需要实现带momentum的SGD优化器,可用于执行前向和反向传播;

g)        layers/fc_layer.py 你需要实现全连接层的前向和反向传播,该层将输入向量x映射到输出向量u,其中u = Wx + b,其中W是该层权重,b是偏置;

h)        loss.py 你需要实现softmax_cross_entropy_loss;

i)         runner.ipynb 完成所有代码后的执行文件,执行训练和测试过程。

 

fc_layer.py 你需要实现全连接层的前向和反向传播,该层将输入向量x映射到输出向量u,其中u = Wx + b,其中W是该层权重,b是偏置

network.py 实现了网络模块,可在定义网络体系结构和进行模型训练时使用

dataloader.py 实现了数据加载器,可用于准备数据以进行训练和测试

visualize.py 实现了plot_loss_and_acc函数,该函数可用于绘制损失和准确率曲线

optimizer.py 你需要实现带momentum的SGD优化器,可用于执行前向和反向传播

loss.py 你需要实现softmax_cross_entropy_loss

solver.py 这个文件中实现了训练和测试的流程。建议从这个文件开始阅读代码;

runner.ipynb 完成所有代码后的执行文件,执行训练和测试过程。

train without momentum

Final test accuracy 0.8997

Final test accuracy 0.9207

资源下载: