Pytorch的入门操作(三)

news2025/1/2 0:16:09

2.7 使用Pytorch实现手写数字识别

2.7.1 目标

  1. 知道如何使用Pytorch完成神经网络的构建
  2. 知道Pytorch中激活函数的使用方法
  3. 知道Pytorch中torchvision.transforms 中常见图形处理函数的使用
  4. 知道如何训练模型和如何评估模型

2.7.2 思路和流程分析

流程:

  1. 准备数据,这些需要准备DataLoader
  2. 构建模型,这里可以使用torch构造一个深层的神经网络
  3. 横型的训练
  4. 横型的保存,保存模型,后续持续使用
  5. 横型的评估,使用测试集,观察横型的好坏

2.7.3 准备训练集和测试集

准备数据集的方法前面已经讲过,但是通过前面的内容可知,调用MNIST返回的结果中图形数据是个Image对象需要对其进行处理
为了进行数据的处理,接下来学习torchvision.transfroms 的方法

2.7.3.1 torchvision.transforms的图形数据处理方法

  1. torchvision.transforms .ToTensor
    把一个取值范围是[0,255]的PIL.Image或者shape为(H,w,C)的numpy.ndarray,转换成形状为[c,H,w],取值范围是[0,1.0]的torch.FloatTensor
    其中(H,w,C)意思为(高,宽,通道数》,黑白图片的通道数只有1,其中每个像索点的取值为[0,255]彩色图片的通道数为(R,G,B),每个通道的每个像素点的取值为[0,255],三个通道的颜色相与兽加,形成了各种额色
    示例如下:
    在这里插入图片描述

2.7.3.2 torchvision.transforms.Normalize(mean,std)

给定均值: mean,shape和图片的通道数相同(指的是每个通道的均值),方差: std,和图片的通道数相同(指的是每个通道的方差),将会把Tensor 规范化处理
即: NormaTized_image=(image-mean)/std。
例如:
在这里插入图片描述
在这里插入图片描述

2.7.3.3 torchvision.transforms .Compose(transforms)

将多个transform组合起来使用
例如
在这里插入图片描述

2.7.4 准备MNIST数据集的资料组和数据加载器

准备训练集
在这里插入图片描述
准备测试集
在这里插入图片描述

2.7.5 构建模型

补充:全连接层:当前一层的神经元和前一层的神经元相互链接,其核心损作就是y =wx ,即矩阵的乘法,实现对前一层的数据的变换
模型的构建使用了一个三层的神经网络,其中包括两个全连接层和一个输出层,第一个全连接层会经过激活函数的处理,将处理后的结果交给下一个全连接层,进行变换后输出结果
那么在这个模型中有两个地方需要注意:

  1. 激活函数如何使用
  2. 每一层数据的形状
  3. 横型的损失函数

2.7.5.1 激活函数的使用

在这里插入图片描述

2.7.5.2 模型中数据的形状([添加形状变化图形])

1.原始输入数据为的形状: [batch_size,1,28,28]
2.进行形状的修改:[batch_size,28*28] (全连接层是在进行矩阵的乘法操作)
3.第一个全连接层的输出形状: [batch_size,28] ,这里的28是个人设定的,你也可以设置为别的
4.微活函数不会修改数据的形状
5.第二个全连接层的输出形状: [batch_size,10],因为手与数字有10个类别
构建模型的代码如下:
在这里插入图片描述
可以发现: pytorch在构建模型的时候形状上并不会考虑batch_size

2.7.5.3 模型的损失函数

首先,我们需要明确,当前我们手写字体识别的问题是一个多分类的问题,所谓多分类对比的是之前学习的2分类
回顾之前的课程,我们在逻辑回归中,我们使用sigmoid进行计算对数似然损失,来定义我们的2分类的损失。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.7.6 模型的训练

训练的流程:

  1. 实例化模型,设置模型为训练模式
  2. 实例化优化器类,实例化损失函数
  3. 获取,遍历dataloader
  4. 梯度置为0
  5. 进行向前计算
  6. 计算损失
  7. 反向传播
  8. 更新参数
    在这里插入图片描述

2.7.8 模型的保存和加载

2.7.8.1 模型的保存

在这里插入图片描述

2.7.8.2 模型的加载

在这里插入图片描述

2.7.9 模型的评估

评估的过程和训练的过程相似,但是:

  1. 不需要计算梯度
  2. 需要收集损失和准确率,用来计算平均损失和平均准确率
  3. 损失的计算和训练时候损失的计算方法相同
  4. 准确率的计算:
  • 模型的输出为[batch_size10]的形状
  • 其中最大值的位置就是其预测的目标值 (预测值进行过sotfmax后为概率,sotfmax中分母都是相同的,分子越大,概率越大)
  • 最大值的位置获取的方法可以使用 torch.max,返回最大值和最大值的位置。
  • 返回最大值的位置后,和真实值([batch_size]) 进行对比,相同表示预测成功
    在这里插入图片描述
    完整的代码
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

推荐系统-召回-概述(五):一切为了业务

在前面几篇文章里,我们介绍了主流的召回模型和算法。但算法更多地是从个性化推荐的角度来解决问题。许多业务上的问题,如安全问题、商业价值、用户体验、流量扶持等种种业务需求,仅仅基于模型,是无法得到完美解决的,它…

成长的旅途,未知的邂逅

成长的旅途,未知的邂逅兰舟千帆纷繁复杂,斑驳陆离的岁月邂逅?出发!兰舟千帆 我是兰舟千帆,从2020年加入csdn写博客到现在差不多就是两年了。马上也就三年了。这样的时间段,也同样记录着我的成长。哎嘿。我现…

构建基于 Ingress 的全链路灰度能力

作者:涂鸦 背景 随着云原生技术不断普及,越来越多的业务应用开始向云原生架构转变,借助容器管理平台 Kubernetes 的不可变基础设施、弹性扩缩容和高扩展性,助力业务迅速完成数字化转型。其中,集群入口流量管理方式在…

清朝盛衰的六个时间点!

清朝盛衰的整个过程经历了六个时间节点: 一六六一年﹙顺治十八年﹚是第一个时间节点。 正月初六夜半时分,顺治帝预感生命垂危,急命太监传呼麻勒吉与王熙两人赶赴养心殿。帝对王熙说:“朕出痘,势将不起,尔…

[附源码]Python计算机毕业设计Django高校流浪动物领养网站

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

PCB信号仿真之为什么DDR走线要同组同层?

作者:一博科技高速先生成员 刘春 随着信号速率的不断提高,对信号时序的要求也越来越严格。在PCB设计中,我们等长的最终目的都是为了等时,以满足信号的时序要求。因此,需要我们对信号在传输线上的时延有一定的了解&…

python之文件操作相关知识

python之文件操作相关知识 一、文件的打开与关闭 1、打开文件 在Python中,使用 open() 函数,可以打开一个已经存在的文件,或创建一个新文件 语法如下: open(文件名, 访问模式) 说明: 访问模式决定了打开文件的模式&…

【自然语言处理(NLP)】基于SQuAD的机器阅读理解

【自然语言处理(NLP)】基于SQuAD的机器阅读理解 作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学…

vue3和vue2组件风格对比

Vue3 组合式 API(Composition API) 主要用于在大型组件中提高代码逻辑的可复用性。 传统的组件随着业务复杂度越来越高,代码量会不断的加大,整个代码逻辑都不易阅读和理解。 Vue3 使用组合式 API 的地方为 setup。 在 setup 中…

无代码资讯|SAP发布低代码平台;钉钉低代码应用数破500万;轻流举办无代码城市论坛......

栏目导读:无代码资讯栏目从全球视角出发,带您了解无代码相关最新资讯。 TOP3 大事件 1、SAP 召开“SAP TechEd ”大会,发布低代码平台 SAP Build 11 月 15 日-16 日,全球企服巨头 SAP 在美国拉斯维加斯召开“2022 SAP TechEd”产…

MySQL是如何实现事务的隔离级别

MySQL是如何实现事务的隔离级别 - 游生 - 博客园 摘要 本文旨在了解MySQL InnoDB引擎如何支持事务的隔离级别。 文章主要内容分两个部分。 第一部分阐述数据库的并发问题以及为之产生的ANSI SQL 标准隔离级别。 第二部分根据 MySQL 官方文档解释 InnoDB 是如何支持这些隔离…

关于python中自带的类似postman的工具

关于python中自带的类似postman的工具 1.新建一个http 请求: 2.添加请求方式 2.1程序运行 验证数据的运行: 1.post数据添加验证

打造无证服务化:这个政务服务平台有点不一样

摘要:华为云携手深圳市华傲数据技术有限公司针对“数字政府建设”与“数字经济发展”两大场景,打造华傲可信政务区块链解决方案。本文分享自华为云社区《华为云携手华傲数据打造“无证服务”政务服务平台》,作者:灰灰哒 。 当前&…

xray扫描器的使用长亭xray被动扫描

长亭xray被动扫描为了实现点到哪里扫到哪里,用长亭xray配合burp suite插件 插件名为Passive Scan Client GitHub - lilifengcode/Burpsuite-Plugins-Usage: Burpsuite-Plugins-Usage 就用默认端口1664就行,把浏览器代理设成127.0.01 : 1664…

【Pandas数据处理100例】(八十七):Pandas使用get_dummies构建哑变量

前言 大家好,我是阿光。 本专栏整理了《Pandas数据分析处理》,内包含了各种常见的数据处理,以及Pandas内置函数的使用方法,帮助我们快速便捷的处理表格数据。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPandas版本:1.3.5N…

<学习笔记>从零开始自学Python-之-web应用框架Django( 十一)用户系统和身份验证

用户系统是现代网站的重要组成部分,对用户进行分组权限管理是非常必要的。 Django内置了一套用户和身份验证系统,不用太多代码开发就可以使用这个系统。 Django 的身份验证系统包括: • 用户 • 权限:二元(是或否&…

Unity游戏Mod/插件制作教程05 - 插件实例2: 简单功能实现

这一次的教程进行一个小小的功能实现,完整的制作一个插件。以Mirror这个游戏为例,插件的目标是当玩家按下空格时,有一定概率为玩家增加金钱,或者扣除玩家金钱。概率、增加的金钱、扣除的金钱都由配置文件决定。 使用dnSpy查找金钱…

【SQL】数据库事务

【SQL】数据库事务事物的ACID特性事务的状态显式事务隐式事务事务的使用举例SQL中的四种隔离级别MySQL中的隔离级别如何设置事务的隔离级别innodb默认支持事务事务是一组逻辑操作单元,使数据从一种状态转变到另一种状态事物的ACID特性 原子性(atomicity…

Java搭建宝塔部署实战毕设项目springboot车险理赔管理系统源码

大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套Java开发的毕业设计项目springboot车险理赔管理系统源码。 技术架构 技术框架:SpringBoot mybatis bootstrap jquery mysql5.7运行环境:jdk8 nginx1.20 tomcat9 …

QT学习笔记(六)——QT弹出对话框并在主窗口调用对话框的信息

QT弹出对话框并在主窗口调用对话框的信息,显示影像 最近封控,大部分时间都在自己学习写代码,有点feel 了哈,自己摸出来一个简单的qt 界面,也实现了自己想要的功能。本篇博客主要记录一下,如何弹出对话框&a…