【李沐深度学习笔记】线性代数实现

news2025/2/23 10:52:43

课程地址和说明

线性代数实现p2
本系列文章是我学习李沐老师深度学习系列课程的学习笔记,可能会对李沐老师上课没讲到的进行补充。
这节就算之前内容的复习,后面以截图形式呈现

标量由只有一个元素的张量表示

import torch
x = torch.tensor([3.0])
y = torch.tensor([2.0])
# 加减法
print(x+y)
# 乘法
print(x * y)
# 除法
print(x / y)
# 幂运算
print(x**y)

运行结果:
tensor([5.])
tensor([6.])
tensor([1.5000])
tensor([9.])

你可以将向量视为标量值组成的列表

# 生成0-3的顺序列表,(函数是左闭右开)
x = torch.arange(4)
print(x)

运行结果:
tensor([0, 1, 2, 3])

通过张量的索引来访问任一元素

访问张量的长度

只有一个轴的张量,形状只有一个元素。

通过指定两个分量m和n来创建一个形状为m × n的矩阵

矩阵的转置

对称矩阵的转置

构造多轴的数据结构


【注】就是构建多维数组

给定具有相同形状的任何两个张量,任何按元素二元运算的结果都将是相同形状的张量

矩阵的哈达玛积

其实就是不按矩阵乘法来,按两个矩阵对应元素相乘得到个新矩阵(前提是矩阵是同形的,即两个相乘的矩阵行列数需要一致)

标量和矩阵相加是所有元素都与标量相加得到新矩阵

计算矩阵所有元素的和

表示任意形状张量的元素和

不论张量形状如何,其求所有元素和的结果永远是标量

指定求和汇总张量的轴(按不同维度求和)


【注】axis是按不同维度求和,从0开始是第1个维度。这里理解上稍微有点难度,我写了代码:

# 按维度求和
C = torch.arange(12).reshape(3,4)
print(C)
# 第一个维度(按列)求和结果
result = C.sum(axis=0)
print(result)
# 第二个维度(按行)求和结果
result = C.sum(axis=1)
print(result)
# 对第一和第二维度合并求和
result = C.sum(axis=[0,1])
print(result)

运行结果:
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
tensor([12, 15, 18, 21])
tensor([ 6, 22, 38])
tensor(66)

# 按维度求和(三维版)
C = torch.arange(27).reshape(3,3,3)
print(C)
# 第一个维度求和结果
result = C.sum(axis=0)
print(result)
# 第二个维度求和结果
result = C.sum(axis=1)
print(result)
# 第三个维度求和结果
result = C.sum(axis=2)
print(result)
# 对第一和第二维度合并求和
result = C.sum(axis=[0,1])
print(result)

运行结果:
tensor([[[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8]],
[[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]],
[[18, 19, 20],
[21, 22, 23],
[24, 25, 26]]])
tensor([[27, 30, 33],
[36, 39, 42],
[45, 48, 51]])
tensor([[ 9, 12, 15],
[36, 39, 42],
[63, 66, 69]])
tensor([[ 3, 12, 21],
[30, 39, 48],
[57, 66, 75]])
tensor([108, 117, 126])
3维版本就相当于这样一个列表,存储了3个矩阵

对第一个维度求和,相当于对每一个矩阵按列优先求和,比如第一个矩阵的(1,2)元素和第二个矩阵的(1,2)元素还有第三个矩阵的(1,2)元素相加就是求和结果中的(1,2)元素30。
对第二个维度求和,相当于对每一个矩阵的每一列求和, 然后得到该结果。
对第三个维度求和,对每一个矩阵的行求和,然后得到该结果
对第一个和第二个维度合并求和,相当于先对第一个维度求和,再对得到的二维矩阵的列求和。

一个与求和相关的量是平均值(mean或average)


【注】In[20]是指按不同维度求均值

计算总和或均值时保持轴数不变

## 不丢维度对各维度求和
a = torch.tensor([[1,2,3],[0,1,2],[0,1,0]])
print(a.sum(axis=0, keepdims=True))
print(a.sum(axis=1, keepdims=True))
## 最后结果的维度还是2维,和原数据一致

运行结果:
tensor([[1, 4, 5]])
tensor([[6],
[3],
[1]])

通过广播将A除以sum_A

## 接上文的小写a
## 广播机制求均值
## 用广播机制将求和后的结果补成3X3矩阵再除
print(a)
print(a.sum(axis=0, keepdims=True))
print(a / a.sum(axis=0, keepdims=True))

运行结果:
tensor([[1, 2, 3],
[0, 1, 2],
[0, 1, 0]])
tensor([[1, 4, 5]])
tensor([[1.0000, 0.5000, 0.6000],
[0.0000, 0.2500, 0.4000],
[0.0000, 0.2500, 0.0000]])

某个轴计算A元素的累积总和

# 累加求和
b = torch.arange(12).reshape(3,4)
print(b)
# 按行累加(即第一行加到第二行变为新的第二行,新的第二行加到第三行变为新的第三行)
print(b.cumsum(axis=0))
# 按列累加(即第一列加到第二列变为新的第二列,新的第二列加到第三列变为新的第三列)
print(b.cumsum(axis=1))

运行结果:
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
tensor([[ 0, 1, 2, 3],
[ 4, 6, 8, 10],
[12, 15, 18, 21]])
tensor([[ 0, 1, 3, 6],
[ 4, 9, 15, 22],
[ 8, 17, 27, 38]])

点积是相同位置的按元素乘积的和

我们可以通过执行按元素乘法,然后进行求和来表示两个向量的点积

矩阵向量积 A x \bm{A}\bm{x} Ax是一个长度为 m m m的列向量,其 i t h i^{th} ith元素是点积 a i T x a_{i}^{T} \bm{x} aiTx


【注】这里就是想说明 A \bm{A} A是一个 m × n m\times n m×n的矩阵, x \bm{x} x是一个 n × 1 n\times 1 n×1的列向量,其点积结果就是一个 m × 1 m\times 1 m×1的列向量。

我们可以将矩阵-矩阵乘法AB看作是简单地执行m次矩阵-向量积,并将结果拼接在一起,形成一个n x m矩阵


【注】a是一个5×3的矩阵。

L2范数是向量元素平方和的平方根(欧氏距离)

L范数,它表示为向量元素的绝对值之和

矩阵的弗罗贝尼乌斯范数(Frobenius norm)是矩阵元素的平方和的平方根

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

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

相关文章

时序分解 | Matlab实现CEEMD互补集合经验模态分解时间序列信号分解

时序分解 | Matlab实现CEEMD互补集合经验模态分解时间序列信号分解 目录 时序分解 | Matlab实现CEEMD互补集合经验模态分解时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现CEEMD互补集合经验模态分解时间序列信号分解 1.分解效果图 &#xff0…

hive3.X的HiveServer2 内存泄漏问题定位与优化方案(bug)

参考文档: https://juejin.cn/post/7141331245627080735?searchId20230920140418F85636A0735C03971F71 官网社区: https://issues.apache.org/jira/browse/HIVE-22275 In the case that multiple statements are run by a single Session before bein…

金蝶云星空与旺店通·旗舰奇门对接集成收料通知单查询连通新增采购订单(金蝶收料通知单-旺店通采购订单开单)

金蝶云星空与旺店通旗舰奇门对接集成收料通知单查询连通新增采购订单(金蝶收料通知单-旺店通采购订单开单) 数据源平台:金蝶云星空 金蝶K/3Cloud结合当今先进管理理论和数十万家国内客户最佳应用实践,面向事业部制、多地点、多工厂等运营协同与管控型企业及集团公司…

Linux学习-HIS系统部署(2)

GitLab服务器搭建 使用rpm包本地部署GitLab服务器 # 确认GitLab主机硬件配置,注GitLab服务器至少要有4G内存,关闭SWAP分区 [rootgitlab ~]# free -mtotal used free shared buff/cache available Mem: 4021 1…

“高级前端开发技术探索路由的使用及Node安装使用“

目录 引言1. Vue路由的使用2. VueNode.js的安装使用总结 引言 在当今互联网时代,前端开发技术日新月异,不断涌现出各种新的框架和工具。作为一名前端开发者,我们需要不断学习和探索新的技术,以提升自己的开发能力。本文将深入探讨…

Windows AD域使用Linux Samba

Windows AD域使用Linux Samba 1. 初始化配置 1.1 初始化配置 配置服务器名 hostnamectl set-hostname samba.sh.pana.cnhosts文件配置,确保正常解析到本机和域控 [rootcentos7 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.loc…

微信小程序商城怎么弄

微信小程序商城怎么弄?这是一个常见的问题,对于那些想要在微信上创建一个自己的商城的人来说。下面为您介绍一些基本的步骤和注意事项,帮助您轻松地创建一个微信小程序商城。 首先,要创建一个微信小程序商城,您需要注册…

java面向对象(七)

文章目录 一、单例设计模式是什么?1.概念2.如何实现1.饿汉式2.懒汉式 3.区分饿汉式和懒汉式 二、main()方法的使用1.使用说明 三、类的成员之四:代码块(或初始化块)1.概念2.静态代码块3.非静态代码块 四、final关键字五、多态性的…

element树形组件使用之数据授权

<template><div><el-card class"tree-card"><p class"title">数据授权</p><div class"box"><div class"tree"><div class"member">选择授权人员</div><div class…

电压放大电路的作用有哪些(电压放大器)

电压放大电路是电子电路中常见且重要的组件&#xff0c;其主要作用是将输入信号的电压放大到所需的输出电压级别&#xff0c;并保持输入信号的形状和准确度。电压放大电路广泛应用于各种电子设备和系统中&#xff0c;具有以下几个重要的作用&#xff1a; 信号放大&#xff1a;电…

算法通关村第14关【白银】| 堆的经典问题

1.数组中的第k个最大元素 思路&#xff1a; 最直观的就是选择法&#xff0c;遍历一k次找到第k大的数之前使用快速排序的思想每次找出一个位置&#xff0c;会超时这里使用堆&#xff08;优先队列&#xff09;&#xff0c;找最大用小堆&#xff0c;找最小用大堆。 例如找第k大的…

Mysql——压缩包方式安装教程

一.Mysql压缩包下载方式 zip版&#xff08;5.7及8.0&#xff09;的下载需到官方网站下载&#xff0c;不同版本对应能安装在不同的操作系统下&#xff0c;本次介绍的是mysql-8.0.30-winx64在win10下的安装方式。 下载网址&#xff1a;MySQL :: Download MySQL Community Server …

java版网页代码生成器系统myeclipse定制开发mysql数据库网页模式java编程jdbc生成无框架java web网页

一、源码特点 java版网页代码生成器系统是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&#xff0c;使…

D. Boris and His Amazing Haircut

Problem - D - Codeforces 问题描述&#xff1a;剪发&#xff0c;将数组a减为数组b&#xff0c;有m个剪刀&#xff0c;每个剪刀只可以用一次且可以在任意区间内剪发&#xff0c;将长度大于mi的减为mi。现在有m数组&#xff0c;数组元素是第i个剪刀可以剪到mi&#xff0c;问能否…

app发布动态解决图片适配问题(等比展示)

#前言 最近在用uni-app写一个移动端的小项目&#xff0c;基本上就是登陆注册、发表动态等&#xff0c;但是发表动态一个最大的问题就是图片的展示问题&#xff0c;因为每个人上传的图片大小是不一样的。 1.如果按照一定的尺寸固定图片宽高&#xff0c;那如果图片规格不符合要求…

第一章:最新版零基础学习 PYTHON 教程(第六节 - Python 中的命名空间和作用域)

什么是命名空间&#xff1a; 命名空间是一个为 Python 中的每个对象都有唯一名称的系统。对象可能是变量或方法。Python 本身以 Python 字典的形式维护一个命名空间。让我们看一个例子&#xff0c;计算机中的目录文件系统结构。不用说&#xff0c;可以有多个目录&#xff0c;每…

关于Allegro17.4 3d模型大小不匹配问题解决

文章目录 问题概述问题原因解决办法 问题概述 Allegro 17.4版本采用 3D Canvas 工具进行3D模型的映射&#xff0c;映射后&#xff0c;无需保存任何映射文件&#xff0c;只要指定好step文件路径&#xff0c;即可将模型映射信息保存在pcb封装文件中&#xff0c;方便快捷。映射流…

idea集成tomcat(Smart Tomcate插件安装)

当我们在 tomcat 上部署好一个 webapp 后&#xff0c;如果我们要修改代码&#xff0c;就需要重新进行打包和部署&#xff0c;但往往在工作中是需要频繁修改代码&#xff0c;然后再查看成果的&#xff0c;就需要反复的进行打包和部署的过程&#xff0c;这是很麻烦的 通过 Smart …

WebGIS开发教程:Openlayers常见功能实现

Openlayers的核心 Openlayers如何实现交互式绘制 创建矢量图层和矢量数据源 - 创建画布 创建画笔 激活画笔 如何加载天地图,设置中心点和显示级别 const TianDiMap_cva new ol.layer.Tile({ title:"天地图矢量注记图层", source:new ol.source.XYZ({ url:htt…

企业诊断屋:二手车交易平台 APP 如何用 AB 测试赋能业务

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 2023年汽车行业新车市场低靡&#xff0c;由新车降价引发的车辆价格波动很快传导到二手车市场&#xff0c;二手车的交易也受到了冲击&#xff0c;收车验车更加谨慎&a…