【深度学习基础】详解Pytorch搭建CNN卷积神经网络实现手写数字识别

news2024/11/26 11:11:55

MNIST 数据集,其包含70000 个28×28 的手写数字的数据集,其中又分为60000 个训练样本与10000 个测试样本。

安装实验用到的包

anaconda promt 安装python包, 首先在开始界面打开prompt

进入到相应的虚拟环境中,下面的python38你自己创建的虚拟环境名称。

# 激活虚拟环境,venv是你python虚拟环境名字
activate python38

安装package,依次输入下面的指令

# 安装package
pip install torch
pip install numpy
pip install torchvision
pip install matplotlib
pip install opencv-python 

 最后一行显示 successfully代表安装成功。

Ⅰ. 数据读取器

import torch
from torch import nn
from torch import optim
from torch.nn.parameter import Parameter
import torchvision
import torchvision.transforms as transforms
import torch.nn.functional as F
import random
import matplotlib.pyplot as plt
import numpy as np
import os
# 在需要生成随机数的程序中,确保每次运行程序所生成的随机数都是固定的,使得实验结果一致
#torch.manual_seed(1)
batch_size_train = 64
batch_size_valid = 64
batch_size_test = 1000

1.1  训练集

下载训练集

transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.1307,), (0.3081,))
])

trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=batch_size_train)

1.2. 验证集和测试集

官方的MNIST 数据集当中是没有划分验证集的,但为了使训练结果更加直观,选择将10000 个测试样本当中的5000 个划分为验证集,剩下5000 个依然为测试集。在此需要使用torch.utils.data.sampler.SubsetRandomSampler() 函数进行抽样。

首先获取测试样本的索引

testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)
indices = range(len(testset))

然后对该索引进行划分,前5000 个样本作为验证集,后5000 个作为测试集

# 测试集中再取出一半作为验证集
indices_valid = indices[:5000]
sampler_valid = torch.utils.data.sampler.SubsetRandomSampler(indices_valid)
validloader = torch.utils.data.DataLoader(testset, batch_size=batch_size_valid, sampler=samp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2223072.html

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

相关文章

微信小程序中关闭默认的 `navigationBar`,并使用自定义的 `nav-bar` 组件

要在微信小程序中关闭默认的 navigationBar,并使用自定义的 nav-bar 组件,你可以按照以下步骤操作: 1. 关闭默认的 navigationBar 在你的页面的配置文件 *.json 中设置 navigationBar 为 false。你需要在页面的 JSON 配置文件中添加以下代码…

如何在Debian操作系统上安装Doker

本章教程,主要介绍如何在Debian 11 系统上安装Docker。主要使用一键安装Docker脚本和一键卸载脚本来完成。 一、安装Docker #!/bin/bashRED\033[0;31m GREEN\033[0;32m YELLOW\033[0;33m BLUE\033[0;34m NC\033[0mCURRENT_DIR$(cd "$(dirname "$0")…

微知-Linux内核自带的模块被压缩为ko.xz后如何恢复成不压缩版本?(xz -d xxx.ko.xz)

背景 在使用crash定位问题的时候需要使用ko使用对应的符号信息。直接用ko.xz无法正确加载。需要恢复成ko文件。本文介绍如何解压缩。 恢复步骤 在Linux系统中,.xz文件是一种使用LZMA2算法压缩的文件格式。要解压ko.xz文件,你可以使用xz命令行工具。 …

UML外卖系统报告(包含具体需求分析)

1 系统背景 随着互联网技术的快速发展,外卖订餐服务逐渐成为人们生活中的一部分。传统的电话订餐方式面临诸多不便和限制,而基于互联网的外卖订餐系统则提供了更加便捷、快速和高效的订餐服务。这种系统通过将餐厅、顾客和配送人员连接起来,…

职业规划:程序员的成长之路

引言 在快速发展的技术行业中,作为一名程序员,职业规划是至关重要的。从初出茅庐到成为技术专家,每一步都需要明确的目标和不懈的努力。 成长历程 初级阶段(0-2年) 学习与适应:刚入行时,主要任…

Redis 安装部署与常用命令

目录 一、关系数据库与非关系型数据库 1.1 关系型数据库 1.2 非关系型数据库 1.3关系型数据库和非关系型数据库区别 (1)数据存储方式不同 (2)扩展方式不同 (3)对事务性的支持不同 1.4 非关系型数据…

大数据Azkaban(二):Azkaban简单介绍

文章目录 Azkaban简单介绍 一、Azkaban特点 二、Azkaban组成结构 三、Azkaban部署模式 1、solo-server ode(独立服务器模式) 2、two server mode(双服务器模式) 3、distributed multiple-executor mode(分布式多…

54页可编辑PPT | 大型集团企业数据治理解决方案

这份PPT是关于大型集团企业数据治理的全面解决方案,它详细介绍了数据治理的背景、需求、管理范围、框架、解决思路,以及数据治理在实际操作中的关键步骤。内容涵盖了数据架构、数据质量、数据应用等方面的问题,并提出了数据资产透视、智能搜索…

使用 NumPy 和 Matplotlib 实现交互式数据可视化

使用 NumPy 和 Matplotlib 实现交互式数据可视化 在数据分析中,交互式可视化可以更好地帮助我们探索和理解数据。虽然 Matplotlib 是静态绘图库,但结合一些技巧和 Matplotlib 的交互功能(widgets、event handlers),我…

使用 Python 的 BeautifulSoup(bs4)解析复杂 HTML

使用 Python 的 BeautifulSoup(bs4)解析复杂 HTML:详解与示例 在 Web 开发和数据分析中,解析 HTML 是一个常见的任务,尤其是当你需要从网页中提取数据时。Python 提供了多个库来处理 HTML,其中最受欢迎的就…

C++ 整型大数运算(大整数运算)项目

C 整型大数运算项目 一、项目介绍二、项目变量成员三、项目实现构造函数加法减法乘法先计算再进位边计算边进位 除法与取模判断输入输出 四、项目源代码展示在 Big_integer.h 中:在 Big_integer.cpp 中: 五、测试准确性六、优化方向 一、项目介绍 整型大…

Character AI被起诉!14岁青少年自杀,AI陪伴何去何从

终于,AI在青少年心理问题方面,被推上了风口浪尖。 最近,美国佛罗里达州,一名14岁男孩Sewell Setzer的父母控告Character AI公司,声称孩子沉迷该公司的AI聊天机器人,最后走上了自杀的道路。 跟AI聊天还能致…

基于STM32F103的按键检测仿真

基于STM32F103的按键检测 仿真软件: Proteus 8.17 编程软件: Keil 5 仿真实现: 按键第一次按下LED灯亮,第二次按下LED灯灭,往复 按键检测原理: 按键在电路中一端接单片机的IO口,一端接GND&a…

高效库存管理:金蝶云星空与管易云的盘亏单对接方案

高效库存管理:金蝶云星空与管易云的盘亏单对接方案 金蝶云星空与管易云的盘亏单对接方案 在企业日常运营中,库存管理是至关重要的一环。为了实现高效、准确的库存盘点和数据同步,我们采用了轻易云数据集成平台,将金蝶云星空的数据…

JavaWeb合集20-定时任务框架SpringTask

二十、Spring Task 定时任务框架:Spring Task是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 1、Spring Task cron 表达式 cron表达式在线生成器: https://cron.qqe2.com/ cron表达式其实就是一个字符串,通过cron…

极值点与拐点 专题小结

基础知识点 极值点与拐点的知识点 极值点相关概念了解 拐点相关概念了解极值点定义了解 二次函数求根公式理解 1、两个交点的解 2、单个交点的解 3、无交点的情况 含参数的函数 含参二次函数与x轴交点个数影响正负性变化,从而达成条件是否有极值点和拐点。 多重…

优先算法——移动零(双指针)

目录 1. 题目解析 2. 算法原理 3.代码实现 题目: 力扣题目链接:移动零 1. 题目解析 题目截图如下: 不过要注意,这个移动题目要求是在原数组中原地操作,不能新额外开辟一个数组来修改。 2. 算法原理 这个原理可以称之为数…

qt 滚动条 美化

qt QScrollBar 滚动条分为竖直与水平滚动条,两者设置上类似,但也有一些不同,下面主要讲述美化及注意事项。 一、竖直滚动条 竖直滚动条分为7个部分: sub-line、 up-arrow 、sub-page、 hanle、 add-line、 dow-arrow、 add-pag…

SQLI LABS | Less-8 GET-Blind-Boolian Based-Single Quotes

关注这个靶场的其它相关笔记:SQLI LABS —— 靶场笔记合集-CSDN博客 0x01:过关流程 输入下面的链接进入靶场(如果你的地址和我不一样,按照你本地的环境来): http://localhost/sqli-labs/Less-8/ 靶场提示 …

前端实现监控埋点

前端实现监控埋点 前言 我们在应用开发完成本地测试跑通以后上线,线上可能会出现一些测试没有测出来的问题,那么这个时候我们如何定位到哪里会出现问题呢,因为在测试环境可能浏览器的不同,或是没有做兜底出现了一些线上的问题&a…