# 神经网络作业一实验报告
使用了 tensorflow 框架,参考了官方手册和教程进行实现,搭建了一个多层感知机对 MNIST 数据集进行分类。main.py 是入口函数,负责读取 MNIST 数据、调用各项学习方法、并绘制最后的性能图。MLP 相关代码位于 baseline.py,实现了一个单隐层的多层感知机,采用 sigmoid 激活函数,训练轮数为 50 轮。
其余文件均为 baseline 的变体,修改了对应的需要对比的点。
## 一、如何运行
运行 main.py 即可。
| 方法 | 50 轮后的测试集准确率 | 训练集准确率 |
| ----------------- | --------------------- | ------------ |
| baseline | 0.8944 | 0.8935 |
| 全 0 初始化 | 0.1138 | 0.1162 |
| 均方误差 | 0.8320 | 0.8413 |
| adam 自适应学习率 | 0.9564 | 0.9502 |
| L2 正则化方法 | 0.8861 | 0.8937 |
各项方法对比 不同的参数初始化方法
这里选择了全 0 初始化来与 baseline 方法的随机初始化对比。
不同的损失函数
这里选择了均方误差来与 baseline 方法的交叉熵损失对比。
不同的学习率调整方法
这里选择了 adam 自适应学习率方法来与 baseline 方法的固定学习率对比。
不同的正则化方法
这里选择了 L2 正则化方法(正则化项权重设为 0.001)来与 baseline 方法的无正则化对比。
**对比结果**
![](https://www.writebug.com/myres/static/uploads/2022/4/25/05d0ef6eb86e7b7f1f91cb379a1036ec.writebug)
全 0 初始化让 MLP 无法训练,故准确率一直保持在 11% 左右;均方误差性能不如交叉熵,因为是多分类而不是回归问题,使用交叉熵损失函数会更合适一些;采用自适应学习率比固定学习率更灵活高效,故收敛也更快,且性能更好,可以找到全局最优;使用 L2 正则化后训练集准确率提升更快,但最后达到收敛时训练集准确率比不正则化要略低一些,可能是因为防止了过拟合,并且使用 L2 正则化后测试集准确率略有提高。
## 二、最后选用的方法
随机初始化,交叉熵损失函数,adam 自适应学习率方法和无正则化。
因为 adam 自适应学习率方法和 L2 正则化都能提升性能,但我测试了一下同时采用这两种方法,性能反而下降了。所以还是只改进成 adam 自适应学习率方法性能最好。50 轮内训练集准确率最高为 0.9604,最终测试集准确率为 0.9502。
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
使用了 tensorflow 框架,参考了官方手册和教程进行实现,搭建了一个多层感知机对 MNIST 数据集进行分类。main.py 是入口函数,负责读取 MNIST 数据、调用各项学习方法、并绘制最后的性能图。MLP 相关代码位于 baseline.py,实现了一个单隐层的多层感知机,采用 sigmoid 激活函数,训练轮数为 50 轮。
资源推荐
资源详情
资源评论
收起资源包目录
100011951-基于Python实现 MNIST 数据集分类.zip (16个子文件)
nju-ai-nn
myplot.png 35KB
.gitattributes 66B
LICENSE 1KB
191250026丁云翔.pdf 164KB
README.md 3KB
code
learning_rate.py 2KB
main.py 1KB
allZero.py 2KB
regularization.py 2KB
mse.py 2KB
requirements.txt 35B
MNIST_data
t10k-images-idx3-ubyte.gz 1.57MB
train-labels-idx1-ubyte.gz 28KB
train-images-idx3-ubyte.gz 9.45MB
t10k-labels-idx1-ubyte.gz 4KB
baseline.py 2KB
共 16 条
- 1
资源评论
神仙别闹
- 粉丝: 2671
- 资源: 7640
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功