项目简介
本项目手动搭建了一个三层神经网络分类器,不依赖pytorch、tensorflow等现成的支持自动微分的深度学习框架,仅使用numpy实现。该分类器在Fashion - MNIST数据集上进行训练,以完成图像分类任务。代码采用模块化设计,涵盖模型、训练、测试和参数查找等部分。
项目的主要特性和功能
- 模型灵活性:支持自定义隐藏层大小和激活函数类型,可通过反向传播计算给定损失的梯度。
- 训练优化:实现SGD优化器,具备学习率下降、交叉熵损失和L2正则化功能,能依据验证集指标自动保存最优的模型权重。
- 参数查找:可调节学习率、隐藏层大小、正则化强度等超参数,观察并记录模型在不同超参数下的性能。
- 测试功能:支持导入训练好的模型,输出在测试集上的分类准确率。
- 可视化:能对保存的最优模型进行参数可视化。
安装使用步骤
假设已下载本项目的源码文件,按以下步骤操作:
数据准备
确保Fashion - MNIST数据集准备就绪。
模型训练
在根目录下运行 python train.py
,可自行指定模型训练中的参数,例如:
powershell
python train -e 50 -vs 1000 -bs 32 -lr 0.01 -l2 0.001 -dr 0.95 -ds 5000
参数含义:
- -e
:训练epoch数,默认50
- -vs
:valid_size 测试集大小,默认1000
- -bs
:batch_size,默认32
- -lr
:学习率,默认0.01
- -l2
:L2正则化参数,默认0.001
- -dr
:学习率衰减率,默认0.95
- -ds
:学习率衰减步数,默认5000(未使用衰减)
模型结构有关的超参数(如各层神经元的数量以及激活函数),可在 train.py
文件中进行修改。
模型测试
运行了模型训练代码 train.py
后,若选择了 save_model = TRUE
,则会在 model/
目录下保存训练出的最优模型参数。在根目录运行以下代码即可读取最优模型参数进行预测:
powershell
python test.py
将会输出模型在测试集上的 $Loss$ 和 $Accuracy$。
模型参数可视化
在模型训练完成后,在根目录运行以下代码可以对保存的最优模型进行参数可视化:
powershell
python PlotParam.py
超参数网格搜索
运行 param_select.py
,即可进行超参数的网格搜索(该操作耗时较久):
powershell
python param_select.py
在代码文件内可以自行设置搜索参数的网格值,最终各网格值的 Loss
和 Accuracy
会自动保存在 paramsearch_results.json
文件中。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】