PyTorch基础入门

目录

  • 前言
  • 一、[张量的广播&基本运算](https://www.bilibili.com/video/BV1Gg411u7Lr/?spm_id_from=333.999.0.0)
    • 1. 张量的广播特性
    • 2. 逐点&规约&比较运算
  • 二、张量的线性代数运算
    • 1. BLAS & LAPACK
    • 2. 矩阵形变及特殊矩阵构造
    • 3. 矩阵基本运算
    • 4. 矩阵的线性代数运算
    • 5. 矩阵的分解(eig/svd)
  • 三、基本优化思想与最小二乘法
    • 1. 简单线性回归的机器学习建模思路
    • 2. 机器学习建模一般流程
    • 3. 第一个优化算法:最小二乘法
    • 4. 反向验证导数为0——autograd求导
  • 四、动态计算图与梯度下降入门
    • 1. AutoGrad的回溯机制与动态计算图
    • 2. 反向传播与梯度计算
      • 2.1. 阻止计算图追踪
      • 2.2. 识别叶节点(输入节点)
    • 3. 梯度下降基本思想
    • 4. 梯度下降的数学表示
  • 总结


前言

有点Matlab基础,从这里开始刚好
补充点Python中的Numpy/Pandas等基础知识


一、张量的广播&基本运算

在这里插入图片描述

1. 张量的广播特性

  • 相同形状的张量计算
    根据官网说法,“same shapes are always broadcastable”,相同形状数组总是可以进行广播计算。这里简单强调一下,虽然我们往往觉得不同形状之间的张量计算才是应用到广播特性,但其实相同形状的张量计算(一个三维,三个一维),尽管是对应位置元素进行计算,但本质上也是应用到了广播特性。
  • 不同形状张量只要 不同的维度为1即可广播
    在这里插入图片描述在这里插入图片描述
  • 利用reshape修改张量形状:在这里插入图片描述

2. 逐点&规约&比较运算

在这里插入图片描述在这里插入图片描述
这些调整函数不会对原对象进行调整,如果要对原对象进行修改可以加一个下划线方法_()
在这里插入图片描述

  • 科学运算的静态性(只能是张量参与运算,且要为浮点型的)
    在这里插入图片描述
  • 规约运算(通常后面加一个参数表示计算的维度,默认0按行算)
    在这里插入图片描述
    在这里插入图片描述
  • 比较运算在这里插入图片描述在这里插入图片描述

二、张量的线性代数运算

1. BLAS & LAPACK

在这里插入图片描述

2. 矩阵形变及特殊矩阵构造

在这里插入图片描述

  • 对角矩阵dig
    在这里插入图片描述
  • 下三角矩阵triu
    在这里插入图片描述
  • 下三角矩阵
    在这里插入图片描述

3. 矩阵基本运算

在这里插入图片描述

  • 点积dot/vdot(复数运算时有差别)在这里插入图片描述
  • 矩阵乘法mm在这里插入图片描述在这里插入图片描述
  • 矩阵和向量相乘mv 在这里插入图片描述在这里插入图片描述
  • 批量矩阵相乘bmm在这里插入图片描述在这里插入图片描述
  • 矩阵相乘后相加addmm在这里插入图片描述在这里插入图片描述
  • 批量矩阵相乘后相加addbmm在这里插入图片描述

4. 矩阵的线性代数运算

在这里插入图片描述

  • 矩阵的迹trace在这里插入图片描述
  • 矩阵的秩matrix_rank在这里插入图片描述在这里插入图片描述
  • 行列式det在这里插入图片描述在这里插入图片描述
  • 矩阵表示线性方程组在这里插入图片描述
  • 逆矩阵inverse(计算y=x+1)在这里插入图片描述

5. 矩阵的分解(eig/svd)

在这里插入图片描述

  • 特征分解eig在这里插入图片描述在这里插入图片描述在这里插入图片描述
  • 奇异值分解svd
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

三、基本优化思想与最小二乘法

在正式开始进行神经网络建模之前,我们还需要掌握一些基本数学工具,在PyTorch中,最核心的基础数学工具就是梯度计算工具,也就是PyTorch的AutoGrad(自动微分)模块。虽然对于任何一个通用的深度学习框架,都会提供许多自动优化的算法和现成的loss function,PyTorch也不例外,但如果希望能够更深入的理解神经网络、希望对深度学习的建模不仅仅停留在调包和调参的层次,那我们就必须深入一些数学领域、掌握一些数学工具,从底层提升自己的数学能力,以期能够在日后的使用深度学习算法的过程中能够更加灵活的解决问题、取得更好的建模效果。而AutoGrad模块,就是PvTorch提供的最核心的数学工具模块,我们可以利用其编写一系列的最优化方法,当然,要使用好微分工具,就首先需要了解广泛应用于机器学习建模的优化思想。
所谓优化思想,指的是利用数学工具求解复杂问题的基本思想,同时也是近现代机器学习算法在实际建模过程中经常使用基础理论在实际建模过程中,我们往往会先给出待解决问题的数值评估指标,并在此基础之上构建方程、采用数学工具、不断优化评估指标结果,以期达到可以达到的最优结果。本节,我们将先从简单线性回归入手,探讨如何将机器学习建模问题转化为最优化问题,然后考虑使用数学方法对其进行求解。

1. 简单线性回归的机器学习建模思路

在这里插入图片描述

  • 转化为优化问题在这里插入图片描述在这里插入图片描述

2. 机器学习建模一般流程

在机器学习领域,大多数优化问题都是围绕目标函数(或者损失函数)进行求解。在上述问题中,我们需要围绕SSE求最小值。SSE是一个关于a和b的二元函数,要求其最小值,需要借助数学工具,也就是所谓的最优化方法。选择优化方法并执行相应计算,可以说是整个建模过程中最核心也是相对较难的部分,很多时候这个过程会直接决定模型的性能。

  • 最优化问题的求解方法
    在这里插入图片描述
  • 函数的凹凸性
    在这里插入图片描述在这里插入图片描述
  • 凸函数的最小值
    在这里插入图片描述在这里插入图片描述
  • SSE最小值在这里插入图片描述
  • 流程梳理
    在这里插入图片描述在这里插入图片描述

3. 第一个优化算法:最小二乘法

前面提到,利用优化方法求解目标函数其实是机器学习建模过程中最为核心的环节,因此,我们有必要将围绕上述简单线性回归问题,进一步讨论最小二乘法背后的数学逻辑和优化思想,同时简单探讨数据的矩阵表示方法和基本矩阵运算。虽然最小二乘法并不是主流的深度学习损失函数的优化算法,但从最小二乘法入手了解优化算法背后的数学逻辑,却是非常有必要,同时,线性方程也是构建神经网络模型的基础,因此,我们有必要深入探讨线性模型建模细节以及最基本的优化算法:最小二乘法。

  • 代数表示方法在这里插入图片描述在这里插入图片描述

  • 矩阵表示方法在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

SSE是求的2范数(先平方后开根号),后面跟了平方,最后就是误差平方和
其中的 X X X必须是满秩的

  • 最小二乘法的简单实现在这里插入图片描述在这里插入图片描述在这里插入图片描述

4. 反向验证导数为0——autograd求导

当然,我们也可以反向验证,看下损失的数SSEa=1,b=1时偏导数是否都为0。此时就需要借助PyTorch中的autograd模块来进行偏导计算。严格意义上来讲,autograd模块是PyTorch中的自动微分模块,我们可以通过autograd模块中的函数进行微分运算,在神经网络模型中,通过自动微分运算求解梯度是模型优化的核心。关于微分计算梯度进而执行优化的相关方法我们会在后续逐步介绍,此处我们仅适用autograd模块来进行简单的微分计算尝试,也就是对SSE进行偏导计算,判断a、b同时取值为1时偏导是否为0。
对于目前我们所适用的PyTorch 1.7.1版本来说,我们可以直接在张量Tensor中进行微分运算。目前市面上流通的PyTorch教材有些会介绍Variable类,在进行微分运算时需提前将Tensor类转化为Variable类,但其实在PyTorch 0.4版本以后Tensor就已经不仅仅是一个纯计算的载体,而是可以支持微分运算,Variable的概念被逐渐弱化,可微分性也变成了Tensor的一个基本属性,我们只需要在创建Tensor时,通过设置requires_grad属性为True、规定张量可微分即可。

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

四、动态计算图与梯度下降入门

1. AutoGrad的回溯机制与动态计算图

新版PyTorch中的张量已经不仅仅是一个纯计算的载体,张量本身也可支持微分运算,这种可微分性其实不仅体现在我们可以使用grad函数对其进行求导,更重要的是这种可微分性会体现在可微分张量参与的所有运算中。

  • 可微分性在这里插入图片描述在这里插入图片描述

  • 张量计算图在这里插入图片描述在这里插入图片描述

2. 反向传播与梯度计算

我们曾使用autograd.grad进行函数某一点的导数值得计算,其实,除了使用函数以外,我们还有另一种方法,也能进行导数运算:反向传播。当然,此时导数运算结果我们也可以有另一种解读:计算梯度结果。
注:此处我们暂时不区分微分运算结果、导数值、梯度值三者区别,目前位置三个概念相同,后续讲解梯度下降时再进行区分。

在这里插入图片描述

  • 反向传播(只保留叶节点的grad值)
    在这里插入图片描述在这里插入图片描述

  • 中间节点反向传播和输出节点反向传播的区别在这里插入图片描述

  • 中间节点梯度保存在这里插入图片描述在这里插入图片描述

2.1. 阻止计算图追踪

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

  • 创建一个不可导的相同张量detach()在这里插入图片描述

2.2. 识别叶节点(输入节点)

在这里插入图片描述

3. 梯度下降基本思想

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

在这里插入图片描述

  • 方向与步长

当然,梯度下降的基本思想好理解,但实现起来却并不容易(这也是大多数机器学习算法的常态)。在实际沿着目标函数下降的过程中,我们核心需要解决两个问题,其一是往哪个方向走,其二是每一步走多远。以上述简单线性回归的目标函数为例,在三维空间中,目标函数上的每个点理论上都有无数个移动的方向,每次移动多远的物理距离也没有明显的约束,而这些就是梯度下降算法核心需要解决的问题,也就是所谓的方向和步长(学习率)。

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

4. 梯度下降的数学表示

  • 代数表示在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
  • 矩阵表示在这里插入图片描述在这里插入图片描述在这里插入图片描述
  • 举个栗子
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
  • 编写函数执行梯度下降在这里插入图片描述在这里插入图片描述

总结

对应视频链接🔗,适合入门讲的很细,看完去实战看小土堆刚好

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

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

相关文章

Java基础夯实——2.6 Java中锁

1 Java中锁的概念 锁用于控制多个线程对共享资源的访问。只有持有锁的线程才能访问被保护的资源,其他线程必须等待锁的释放。这种机制可以防止线程之间的竞争条件(Race Condition)。保证了同一时刻只有一个线程持有对象的锁并修改该对象&…

【VSCode】常用插件汇总

1 Path Autocomplete(路径提示的插件) 步骤一:在vscode的扩展搜索中直接搜索Path Autocomplete,直接安装 步骤二:配置 配置 VS Code settings.json "path-autocomplete.pathMappings": {"": &q…

IOS通过WDA自动化中遇到的问题

IOS自动化遇到的问题 搭建WDA环境中遇到的问题1、XCode unsupport iphone xxx.2、创建Bundle Identifier出现问题:Communication with Apple failed3、创建Bundle Identifier出现问题:Automatic signing failed \Signing certificate is invalid4、创建B…

Golang Gin Redis+Mysql 同步查询更新删除操作(我的小GO笔记)

我的需求是在处理几百上千万数据时避免缓存穿透以及缓存击穿情况出现,并且确保数据库和redis同步,为了方便我查询数据操作加了一些条件精准查询和模糊查询以及全字段模糊查询、分页、排序一些小玩意,redis存储是hash表key值也就是数据ID&…

(六)- DRM驱动开发(qcom)

一,Linux Android Display 1,Linux Android Display Software Subsystem 密 2,Linux Android Display Architecture 密 二,DRM/KMS Adreno DPU 1,硬件框图 密 1.1 Qualcomm Adreno DPU 8-Series Overview 密 …

游戏AI实现-寻路算法(GBFS)

贪婪最佳优先算法是宽度优先遍历和贪婪算法结合的产物,使用启发式函数选择当前最低代价的节点,改善了宽度优先遍历需要遍历地图的大量节点来找寻结果的缺点。 算法过程: 1.首先设置开始节点的启发函数值(h)为0&#…

[Unity]Unity跨平台开发之Android简介

Android要求和兼容 图形接口支持 注意: 新的 Unity 项目默认不支持 OpenGL ES 2.0。 由于硬件和图形 API 的限制,并非所有渲染管道都与 Android 兼容。 图片压缩 Android标准压缩格式是ETC和ASTC。Unity默认压缩格式是ASTC。如果Android设备不支持您选…

监控易在汽车制造行业信息化运维中的应用案例

引言 随着汽车制造行业的数字化转型不断深入,信息化类IT软硬件设备的运行状态监控、故障告警、报表报告以及网络运行状态监控等成为了企业运维管理的关键环节。监控易作为一款全面、高效的信息化运维管理工具,在汽车制造行业中发挥着重要作用。本文将结合…

python进行矩阵运算

python进行矩阵运算 一、矩阵相乘二、矩阵求逆三、矩阵特征值与特征向量求解四、矩阵约当标准型与转换矩阵求解五、矩阵奇异值分解六、矩阵方程组求解 一、矩阵相乘 python中矩阵相乘可以使用numpy实现,也可以使用sympy实现,以numpy实现为例&#xff0c…

Trimble天宝三维激光扫描仪在建筑工程竣工测量中的应用【沪敖3D】

竣工测量是建筑项目竣工阶段的一个至关重要的环节,它为建筑工程的质量验收和成果核查提供了核心的参考依据。传统的竣工测量方法,如全站仪测量,主要依赖于现场人工操作,存在一些明显的局限性,例如作业时间长、工作量大…

【JavaWeb后端学习笔记】Spring Task实现定时任务处理

Spring Task是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 主要的应用场景有:纪念日提醒,处理订单未支付,还款提醒等。 1、corn表达式 使用Spring Task首先需要了解corn表达式,通过cor…

健康养生:拥抱生活的艺术

健康养生:拥抱生活的艺术 在快节奏的现代生活中,健康已成为我们最宝贵的财富。健康养生,不仅仅是一种生活方式的选择,更是一种对待生活的态度,它关乎于如何在日常中寻找到平衡,让身心得以滋养,…

【C语言程序设计——入门】基本数据类型与表达式(头歌实践教学平台习题)【合集】

目录&#x1f60b; <第1关&#xff1a;print 函数操作> 任务描述 相关知识 编程要求 测试说明 我的通关代码: 测试结果&#xff1a; <第2关&#xff1a;转义字符使用> 任务描述 相关知识 编程要求 测试说明 我的通关代码: 测试结果&#xff1a; <…

K8s ConfigMap的基础功能介绍

在 Kubernetes 中&#xff0c;ConfigMap 是一种用于管理配置信息的资源对象&#xff0c;它允许你将 配置信息与代码解耦&#xff0c;方便管理和更新应用配置&#xff0c;而无需重新构建镜像或重启服务。 ConfigMap 的功能 存储配置信息&#xff1a; 可以以 键值对 的形式存储配…

C++算法第九天

本篇文章我们继续学习c算法 目录 第一题 题目链接 题目展示 代码原理 暴力解法 二分解法 代码编写 第二题 题目链接 题目展示 代码原理 代码编写 重点回顾 朴素二分 非朴素二分 重点一 重点二 重点三 第一题 题目链接 153. 寻找旋转排序数组中的最小值 - 力…

Mysql学习笔记之SQL-2

上篇文章介绍了SQL语句的第一部分数据定义语言&#xff08;DDL)&#xff0c;这篇文章我们介绍SQL语句的第二部分&#xff0c;数据库操作语言&#xff08;DML&#xff09; 1.简介 DML全称&#xff08;Data Manipulation Language&#xff09;&#xff0c;用来对数据表中的数据…

Mybatisplus的学习

一、条件查询部分 在引入mybatisplus的依赖以后,我们不需要再引入mybatis的依赖,因为mybatisplus中已经包含mybatis的依赖。 1自动映射规则 变量名称:private String name 属性名:public String getName(){return name; } 这个getName 中的name就是属性名称 表名和实…

jenkins+docker部署springboot+vue项目

后端的Dockerfile和docker启动脚本 FROM openjdk:17COPY . /home/ProjectSpace/cli/extranet/serverCOPY simsun.ttf /usr/share/fonts/chinese/simsun.ttfWORKDIR /home/ProjectSpace/cli/extranet/serverCMD java -Dspring.config.location/home/ProjectSpace/cli/extranet/…

opencv-python的简单练习

题目1.读取一张彩色图像并将其转换为灰度图。 import cv2 # 读取图片文件 img cv2.imread(./1.png)# 将原图灰度化 img_gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 输出图片 cv2.imshow(img,img) cv2.imshow(img_g,img_gray) # 进行阻塞 cv2.waitKey(0) 题目2&#xff1a;…

AOP实现操作日志记录+SQL优化器升级

文章目录 1.引入依赖1.sun-dependencies 指定依赖2.将sun-dependencies进行install3.sun-common-log引入依赖 2.sun-common-log代码实现1.LogAspect.java&#xff08;需要更改包时就修改Pointcut的切点表达式即可&#xff09;2.log4j2-spring.xml3.效果展示 3.SQL优化器升级1.目…