当前位置: 首页 > article >正文

Pytorch实现CNN实验

一、实验要求

用 python 的 Pytorch模块实现卷积神经网络。网络结构为一个输入层、两个卷积层、一个全连接层、一个输出层。

二、实验目的

  1. 实现一个包含卷积层、池化层和全连接层的卷积神经网
  2. 了解如何在训练数据集上使用反向传播算法和Adam优化算法训练神经网络。
  3. 加深对卷积神经网络的了解

三、实验过程 

 1.搭建卷积神经网络

 1)导入库

导入了PyTorch和相关库,包括神经网络模块 (nn) 和用于图像处理的torchvision模块,以及用于显示进度条的tqdm库

45ac8ff59a3e4ed4b2de53dee3b9dcbe.png

2)定义超参数和设备

定义了批量大小、训练周期数、学习率和保留概率,并检查是否有可用的CUDA设备。

a5e331ac16df48e3be35dea5be348f1c.png 

 

3)数据预处理和加载

定义了数据预处理的转换(将图像转为张量并进行标准化),并加载了MNIST数据集,并创建了训练和测试数据加载器

a7e72ee5cce0467ca8762785c40e1833.png

 

4)定义卷积神经网络模型

使用nn.Sequential定义了一个简单的卷积神经网络模型。模型包含两个卷积层、池化层、全连接层以及一些激活函数和dropout层。

ad30ab38f94243e68b4b84fe67468a53.png

cf5c94d50a8d4db385a88f3cdf286970.png 

 

5)定义损失函数和优化器

使用交叉熵损失和Adam优化器

a1fe2afbe9c84596bc186fce9d6e10f4.png

6)训练和测试循环

5ed84f5d98034c1ba497854e5ca4b4db.png

fd65a88b35df4796a2ac8a0c2438500a.png 

 

2.对模型进行优化、改进

1)运行程序,发现只有每轮训练的测试集结果输出,并没有整个训练测试集结果输出

增加相关代码,输出整体Loss和Acc

 efa12beffb54484f997db23f81a3cf53.png

bba838b2db5547eb8b8dd7bb0278e0a6.png 

 

2)调整网络模型

去掉一层卷积和一层池化

 c2cbce69c7914d52b3054dd0bff0b6b3.png

8bf8375104df4bcbbe95dcdc9fd3985d.png 

增加一层卷积和一层池化 

f323eda0fd29440b997a0b9f8bc0c3ba.png

f4faffb044eb4d738c1fa2b16031252d.png 

调整卷积核大小为3*3 

fd3f2ca09aab4456917f6b4ff864355c.png

2c6b7d35bce04d85888e2f8e041ee1bd.png 

3)调整学习率

调整学习率为1e-5

 e7b5495ca88d475496cee10f20b085fe.png

6c6280accb26419f985599c82aae744e.png 

调整学习率为1e-3 

ec2a7e9347bc45cfa15c1a033e23e4b6.png

9aaa98df5edd4b199b7316c45e9c77de.png 

4)调整epochs

调整epochs为15

 333328f6b89b4b9ba071282b0c7885e8.png

a75ba7db8b7b4b6cbba43431cbb6825f.png 

调整epochs为20 

6f90257b61dd4df39bab9b04bf44fd5a.png

bd2dce5e7232464b98e67ae180b0ed30.png 

四、实验结果

 

 

Train Loss

Train Accuracy

原始

1.4719

0.9906

一层卷积层一层池化

1.4765

0.9869

三层卷积层三层池化

1.4736

0.9888

卷积核为3*3

1.4765

0.9869

调整学习率为1e-5

1.5152

0.9543

调整学习率为1e-3

1.4797

0.9814

调整epochs为15

1.4685

0.9935

调整epochs为20

1.4665

0.9953

        经过多次调参,优化模型,发现两层卷积层,两层池化层,卷积核大小为2*2,学习率为1e-4,epochs为20时,得出的准确率最高。

五、实验总结

        在这个实验中,我使用了PyTorch搭建了一个简单的卷积神经网络(CNN)来进行手写数字(MNIST数据集)的分类任务。首先定义了网络模型,包含了卷积层、池化层和全连接层,通过使用ReLU激活函数和Dropout来增强模型的性能,并且使用了交叉熵损失函数和Adam优化器进行模型的训练,在每个epoch中使用训练集和测试集进行了模型的训练和评估。同时通过修改模型结构。卷积核的大小,学习率等操作进行优化模型,最终发现增大epoch可以使准确率增大,最终可达0.9953.

        实验中也遇到了一些问题,比如在测试集输出中没有总的Loss和Accuracy,通过对代码的调整,成功地添加了这些信息,提高了实验的完整性,更好对比实验结果。并且,刚开始更改模型结构遇到很多困难,有时候因为一个小细节没有注意到,导致修改出错。

 


http://www.kler.cn/news/333718.html

相关文章:

  • 自动驾驶核心技术:感知融合、规划决策、控制执行
  • 枫叶MTS格式转换器- 强大、操作简单的MTS、M2TS视频转换工具供大家学习研究参考
  • vscode qt 最新开发环境配置, 基于最新插件 Qt All Extensions Pack
  • 基于SpringBoot+Vue的摄影社团管理系统
  • 小程序 uniapp+Android+hbuilderx体育场地预约管理系统的设计与实现
  • 心觉:梦想成真的三个核心步骤
  • Docker Desktop 安装Centos 7.9 使用yum install不可用问题
  • ZLMediaKit编译运行
  • CGLib动态代理和JDK动态代理Demo、ASM技术尝鲜
  • 重生到现代之从零开始的C语言生活》—— 内存的存储
  • 微信小程序hbuilderx+uniapp+Android 新农村综合风貌旅游展示平台
  • 项目-坦克大战笔记-子弹的生成
  • activity-context-attribute-alias 元素
  • 中国剩余定理专题
  • 欄位未知的Datatable轉成ObserObservableCollection<T>對象
  • 一、机器学习算法与实践_06迭代法和KMeans、线性回归、逻辑回归算法笔记
  • 【Java】—— 泛型:泛型的理解及其在集合(List,Set)、比较器(Comparator)中的使用
  • Linux学习笔记(六):服务管理,监控,RPM包管理,yum包管理工具,Linux启动管理,网络管理
  • 图像特征提取-SIFT
  • 工业物联网的安全与隐私保护—SunIOT