Pytorch实现CNN实验

news2024/10/8 12:47:44

一、实验要求

用 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.coloradmin.cn/o/2196374.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国外电商系统开发-运维系统文件上传-高级上传

如果您要上传文件到10台服务器中,有3台服务器的路径不是一样的,那么在这种情况下您就可以使用本功能,单独执行不一样的路径 点击【高级】上传

雷池+frp 批量设置proxy_protocol实现真实IP透传

需求 内网部署safeline,通过frp让外网访问内部web网站服务,让safeline记录真实外网攻击IP safeline 跟 frp都部署在同一台服务器:192.168.2.103 frp client 配置 frpc只需要在https上添加transport.proxyProtocolVersion "v2"即…

【星汇极客】STM32 HAL库+CubeMX开发之用户代码规范(持续更新)

前言 本人是一名嵌入式学习者,在大学期间也参加了不少的竞赛并获奖,包括:江苏省电子设计竞赛省一、睿抗机器人国二、中国高校智能机器人国二、嵌入式设计竞赛国三、光电设计竞赛国三、节能减排竞赛国三等。 暑假的时候参加了太多的比赛&#…

ComfyUI 实战教程:古人画像变真人

最近看到一种古画变真人的效果,就是将书上的古人画像重绘为真人,效果炸裂,不敢独享,特别分享给大家。 效果演示 废话不多说,还是先看效果。大家可以猜猜它们都是谁~ 使用方法 这个方法在 Stable Diffusi…

斩获ICDAR历史地图OCR比赛冠军:我们如何处理密集旋转交叉文本?

ICDAR 比赛简介 ICDAR 比赛 https://rrc.cvc.uab.es/是国际公认的文字领域权威的比赛,文字领域顶会论文里的数据测评和测评指标往往都来源于ICDAR比赛的数据和指标,每年一般会有几个大类的赛事,然后每个赛事会细分3-4个比赛。ICDAR竞赛因其极…

APP未上架开通微信支付流程分享

在移动互联网时代,支付功能的便捷性对于APP的成功至关重要。即便APP尚未上架至应用商店,开发者仍可以提前开通微信支付功能,以便进行内部测试、预售活动或特定场景下的支付需求。本文将详细介绍APP未上架时如何开通微信支付的流程&#xff0c…

74.【C语言】文件操作(1)

目录 1.进行文件操作的原因 销毁的示例 2.文件的类型 1.操作文件的步骤 2.文件名 3.查看文件路径的方法 方法1 方法2 方法3 4.数据文件的介绍 举例 ① ASCII码的形式(即字符形式)存储 01.手动写入数据 02.用程序写入数据 ②二进制形式存储 理解"不加转换&…

技术美术百人计划 | 《5.4 水体渲染》笔记

一、水体渲染的波形模拟技术-基于物理 基于物理的波形模拟方法: 欧拉方法(Eulerian approaches)[Kass 1990]拉格朗日方法(Lagrangian approaches) [Stam 1995]欧拉-拉格朗日混合方法(Hybrid approaches&a…

想有独立站但是不知道怎么建站,自助/外包建站怎么选?

绝大多数外贸人和电商人都会有一个疑问,那就是选择自助建站还是外包建站更好——我个人觉得吧,这两个选择主要取决于时间,技术能力,预算还有你的具体需求。 自助建站 比如自助建站,它就更适合预算有限、需求较简单且…

ComfyUI增强图像细节只需要一个节点(附工作流),SD1.5、SDXL、FLUX.1 全支持,简单好用!

今天给小伙伴们介绍一个非常简单,但又相当好使的一个插件。 功能很简单,就是增加或者减少图像的细节,节点也很简单,就一个节点,只需要嵌入我们的 ComfyUI 的基础工作流中就可以了,随插随用。 而且该插件不…

GPT系列

GPT(Generative Pre-Training): 训练过程分两步:无监督预训练有监督微调 模型结构是decoder-only的12层transformer 1、预训练过程,窗口为k,根据前k-1个token预测第k个token,训练样本包括700…

一文带大家快速上手SQLAlchemy 对数据的增删改查操作

SQLAlchemy SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”。SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合。我们可以使用Flask和SQLAlchemy的数据库访问层(DAL&…

别人苦画流程图一小时,我却瞬间搞定12 种图表!

在AI写作中,如何才能生成各种图表呢?例如流程图、序列图、甘特图等,今天就来教你如何生成。 本文阅读难度:★☆☆☆☆ 在商业、学术场景中,经常需要画流程图,手工画的话至少得1个小时才能完画&#xff0c…

宠物咖啡馆数字化转型:SpringBoot框架的实践

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理基于Spring Boot的宠物咖啡馆平台的设计与…

gstreamer 内存 alloctor 介绍

文章目录 前言一、gstreamer 默认的内存 alloctor1. gstreamer 中默认的内存 allocator 为 GST_ALLOCATOR_SYSMEM (即SystemMemory)2. GST_ALLOCATOR_SYSMEM 申请内存实例二、gstreamer 目前支持的几种内存 alloctor1.GstDmaBufAllocator1.1 GstDmaBufAllocator 介绍1.2 GstDma…

马丁代尔药物大典数据库

马丁代尔药物大典是一本由Pharmaceutical Press出版的参考书,拥有全球使用的近 6000 种药物和药品,包括超过 125,000 种专有制剂的详细信息。其中还包括近 700 篇疾病治疗评论。 它于 1883 年首次出版,马丁代尔包含全球临床用药信息&#xff…

pytest的基础入门

pytest判断用例的成功或者失败 pytest识别用例失败时会报AssertionError或者xxxError错误,当捕获异常时pytest无法识别到失败的用例 pytest的fixture夹具 pytest的参数化 #coding:utf-8 import pytestfrom PythonProject.pytest_test.funcs.guess_point import ge…

android 绘制流程

网上看了一些绘制相关的框架图,感觉有些不对,先记录下 主要是 surface 和framebuffer的关系,surface是用来管理数据内容并最终通过layer输出framebuffer的,因此应该是上下两层的管理,而不是平行的 二hwc合并内容&…

STM32 HAL库UART查询方式实例

本文中介绍USART编程涵盖了三种主要方法,详细介绍STM32F407微控制器结合HAL库,通过UART的查询方式来实现一个实用的密码验证程序。提示用户键入一个字符作为密码。只有当用户精准地输入字符6时,系统才会反馈“密码正确”的确认信息。反之&…

vscode 中显示 pnpm : 无法加载文件 C:\Users\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本

vscode中运行pnpm报错 pnpm : 无法加载文件 C:\Users\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本 解决办法如下 1、用 get-ExecutionPolicy 命令在vscode终端查询状态 如果返回的是 Restricted ,则说明是禁止的 2、用 set-ExecutionPolic…