麻瓜大学信息科学与技术学院※
学生实验报告※
课程名称_ 深度学习 实验名称__ 卷积神经网络
专业班级:_______ 学号____________ 姓名______
一、实验内容※
本实验要求学生能设计一个基于LeNet网络的分类模型,理解并编程实现网络的搭建和训练测试过程,通过样本训练网络,最终能使用训练成熟的网络对实验数据进行分类。
具体要求:给出mnist数字分类的样本数据使用设计的网络进行训练,然后任意给出实测数据,网络对实测数据能正确识别。
二、实验环境※
(主要描述实验的编程环境,包括操作系统、编程语言、编程工具等)
操作系统: Arch Linux x86_64
编程语言: Python 3.12.3
编程工具: zsh 5.9-5 vim-runtime 9.1.0346-2
三、实验步骤※
1.分析设计※
(此处写程序的设计思路,流程图、接口设计等)
程序设计思路※
- 数据集初始化模块 (mnist_init.py):该模块负责下载MNIST数据集,并提供了显示数据集信息和保存图像的功能。
- 模型训练模块 (mnist_train.py):该模块定义了LeNet模型的结构,并提供了加载MNIST数据、训练模型、测试模型和保存模型的功能。
- 模型测试模块 (mnist_test.py):该模块用于加载训练好的模型并对测试集进行测试,同时展示预测结果的可视化。
- 主程序模块 (main.py):该模块为用户提供了一个简单的命令行界面,根据用户的选择调用不同的功能模块。
流程图:※
接口设计:
※
数据集初始化模块 (mnist_init.py):
- download_mnist_dataset(): 下载MNIST数据集
- display_dataset_info(train_data, test_data): 显示数据集信息
- save_img(data, save_path): 保存图像
模型训练模块 (mnist_train.py):
- LeNet: LeNet模型结构
- load_mnist_data(train_batch_size, test_batch_size): 加载MNIST数据集
- train_model(model, train_loader, criterion, optimizer, epochs): 训练模型
- save_model(model, file_path): 保存训练好的模型
模型测试模块 (mnist_test.py):
- LeNet: LeNet模型结构
- test_model(model, test_loader): 测试模型
主程序模块 (main.py):
- main(): 主程序入口,提供命令行交互界面
2.程序实现※
(此处描述程序数据结构和核心算法的实现,遇到的主要问题及解决办法等。注意:不需要粘贴全部代码,只贴核心重要的部分;需要有必要的注释,不能只贴代码)
四、实验结果※
(描述测试数据的设计及最终得到的结果,可截图)
五、实验总结※
(对实验过程和结果进行分析,如在分析设计与实现的过程中需要特别注意的地方等)
经典的LeNet模型结构简单而高效由相对简单的卷积神经网络结构,由卷积层、池化层和全连接层组成。其简单的结构使得它在计算资源有限的情况下也能取得较好的效果。为手写数字识别提供了高效的方法,是早期引入卷积层和池化层的经典模型之一。
过程分析:※
- 数据预处理:数据预处理对模型训练和性能有着重要影响。在这个示例中,对MNIST数据集进行了转换为张量和归一化的操作,这有助于加速模型的收敛和提高训练效果
- 损失函数与优化器的选择:
损失函数的选择需要与任务类型相匹配,对于分类任务,交叉熵损失函数是常用的选择。
优化器的选择也很重要,不同的优化器对模型的收敛速度和稳定性有着不同的影响。在这里使用了随梯 度下降(SGD)优化器。 - 训练过程与调参:
训练过程中需要关注模型的收敛情况,包括损失值的变化和准确率的提升。
需要注意学习率、批大小等超参数的选择,这些超参数会直接影响模型的训练效果。
结果分析: ※
- 可以通过绘制损失曲线和准确率曲线来分析模型的训练效果,进一步评估模型的性能。
- 还可以对模型进行测试集上的验证,评估模型在未见过的数据上的表现。
- 如果需要进一步提高模型性能,可以尝试调整模型结构、超参数,或者尝试其他更复杂的模型。
全部代码在Github