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

课程地址和说明

线性代数实现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.rhkb.cn/news/143331.html

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

相关文章

华为云云耀云服务器L实例评测|搭建CounterStrike Source Delicated Server(CS起源游戏服务器)

华为云云耀云服务器L实例评测|搭建CounterStrike Source Delicated Server(CS起源游戏服务器) #【有奖征文】华为云云服务器焕新上线,快来亲身感受评测吧!# ⭐️ CounterStrikeSource(CS起源是Valve的一款…

【Vue简介+搭建Vue开发环境+Hello小案例】

Vue简介搭建Vue开发环境Hello小案例 1 Vue简介2 搭建Vue开发环境3 Hello小案例 1 Vue简介 Vue是一套用于构建用户界面的渐进式JavaScript框架。&#xff08;渐进式&#xff1a;Vue可以自底向上逐层的应用<简单应用&#xff1a;只需要一个轻量小巧的核心库><复杂应用&…

tp8 Editor.md

Editor.md - 开源在线 Markdown 编辑器 放于public文件夹下 html代码&#xff1a; <div class"layui-col-md12" id"content"><textarea name"content" placeholder"详情" class"layui-textarea">{notempty nam…

05-Zookeeper典型使用场景实战

上一篇&#xff1a;04-Zookeeper集群详解 1. Zookeeper 分布式锁加锁原理 如上实现方式在并发问题比较严重的情况下&#xff0c;性能会下降的比较厉害&#xff0c;主要原因是&#xff0c;所有的连接都在对同一个节点进行监听&#xff0c;当服务器检测到删除事件时&#xff0c…

目标追踪学习经验总结

标题目标追踪算法学习经验总结   最近对目标追踪算法进行了学习&#xff0c;以下是我的学习经验&#xff0c;如有不对之处&#xff0c;欢迎大家指正。 1、简介 1.1 定义 目标跟踪是通过分析视频图片序列&#xff0c;对检测出的各个候选目标区域实施匹配&#xff0c;定位出这…

nat综合实验

路漫漫其修远兮,吾将上下而求索。 实验目的如图 实验思路&#xff1a;配置内网&#xff0c;再配置外网&#xff0c;再做nat clien1配置 clien2配置 pc3配置 lsw1配置 sysname lsw1 # vlan batch 10 20 30 # interface MEth0/0/1 # interface Eth-Trunk1port link-type trunkp…

数据结构——排序

排序算法 前言一、认识排序排序的概念常见的排序算法排序实现的接口 二、常见排序算法的实现插入排序直接插入排序希尔排序 选择排序直接选择排序堆排序 交换排序冒泡排序 三、各个排序的效率比较四、完整代码演示&#xff1a;shell_insert.hshell_insert.ctest.c 总结 前言 来…

怎样在CSDN插入代码块 怎么变色?

添加代码块&#xff0c;通常有三种方式&#xff1a; 文章目录 ①点击 工具栏中的代码块 代码块 </>&#xff0c;② 快捷键 ctrlshiftk③ 先粘贴上代码&#xff0c;在选中 ctrlshiftk4 如果代码没有变彩色 ①点击 工具栏中的代码块 代码块 </>&#xff0c; 例如 选…

Docker版部署RocketMQ开启ACL验证

一、拉取镜像 docker pull apache/rocketmq:latest 二、准备挂载目录 mkdir /usr/local/rocketmq/data mkdir /usr/local/rocketmq/conf 三、运行 docker run \ -d \ -p 9876:9876 \ -v /usr/local/rocketmq/data/logs:/home/rocketmq/logs \ -v /usr/local/rocketmq/data…

Redis之zset类型

文章目录 Redis之zset类型1. 添加元素/获取集合中元素的数量2. 按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素3. 获取元素的分数4. 删除元素5. 获取指定分数范围的元素6. 增加某个元素的分数7. 获得指定分数范围内的元素个数8. 获取元素的排名9. 按照排名范围…

Hive【Hive(二)DML】

启动 hive 命令行&#xff1a; hive DML 数据操作 1、数据导入 1.1、向表中装载数据&#xff08;load&#xff09; 语法&#xff1a; hive> load data [local] inpath 数据的path [overwrite] into table student [partition (partcol1val1,…)];&#xff08;1&#x…

轻松上手Docker:学习如何创建和运行自己的Docker容器

文章目录 轻松上手Docker&#xff1a;学习如何创建和运行自己的Docker容器容器的介绍Docker的技术架构容器的工作机制&#xff08;Docker&#xff09;容器的关键技术 - NamespaceNamespace隔离说明 容器的关键技术 - CgroupDocker环境搭建1&#xff09;安装基础软件包2&#xf…

十四,间接漫反射用到球体中

间接光照分为间接漫反射和间接镜面反射。 辐照度图是用来适用于间接漫反射的。 直射光也有漫反射&#xff0c;对比下两者。 直接光kD * albedo / PI * radiance * NdotL&#xff1b;其中radiance * NdotL是光照, 间接光&#xff1a; kD * texture(irradianceMap, N).rgb* al…

SD-MTSP:萤火虫算法(FA)求解单仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)

一、萤火虫算法&#xff08;FA&#xff09;简介 萤火虫算法(Firefly Algorithm&#xff0c;FA)是Yang等人于2009年提出的一种仿生优化算法。 参考文献&#xff1a;田梦楚, 薄煜明, 陈志敏, et al. 萤火虫算法智能优化粒子滤波[J]. 自动化学报, 2016, 42(001):89-97. 二、单仓…

八大排序详解

目录 1.排序的概念及应用 1.1 排序的概念 1.2 排序的应用 1.3 常见的排序算法 2.常见排序算法的实现 2.1 直接插入排序 2.1.1 基本思想 2.1.2 动图解析 2.1.3 排序步骤&#xff08;默认升序&#xff09; 2.1.4 代码实现 2.1.5 特性总结 2.2 希尔排序 2.2.1 基本思…

HarmonyOS开发:封装一个便捷的Log工具类

前言 日志打印&#xff0c;没什么好说的&#xff0c;系统已给我们提供&#xff0c;且调用也是非常的简单&#xff0c;我们封装的目的&#xff0c;一是扩展&#xff0c;打印一些不常见的类型&#xff0c;比如格式化json&#xff0c;使得日志看起来比较好看&#xff0c;二是&…

GEO生信数据挖掘(二)下载基因芯片平台文件及注释

检索到目标数据集后&#xff0c;开始数据挖掘&#xff0c;本文以阿尔兹海默症数据集GSE1297为例 目录 下载平台文件 1.AnnotGPL参数改为TRUE,联网下载芯片平台的soft文件。&#xff08;国内网速奇慢经常中断&#xff09; 2.手工去GEO官网下载 转换芯片探针ID为gene name 拓…

智能合约经典漏洞案例,xSurge 重入漏洞+套利 综合运用

智能合约经典漏洞案例&#xff0c;xSurge 重入漏洞套利 综合运用 1. 事件介绍 xSurge 被攻击事件发生在 2021-08-16 日&#xff0c;距离今天已经近 1 年了&#xff0c;为什么还会选择这个事件进行分析&#xff1f;主要是这个攻击过程很有意思&#xff0c;有以下的几点思考 使…

UG\NX二次开发 通过点云生成曲面 UF_MODL_create_surf_from_cloud

文章作者:里海 来源网站:《里海NX二次开发3000例专栏》 感谢粉丝订阅 感谢 Rlgun 订阅本专栏,非常感谢。 简介 有网友想做一个通过点云生成曲面的程序,我们也试一下 效果 代码 #include "me.hpp" /*HEAD CREATE_SURF_FROM_CLOUD CCC UFUN */

【2023年11月第四版教材】第15章《风险管理》(合集篇)

第15章《风险管理》&#xff08;合集篇&#xff09; 1 章节说明2 管理基础2.1 风险的属性2.2 风险的分类★★★2.3 风险成本★★★2.4 管理新实践 3 管理过程4 管理ITTO汇总★★★5 过程1-规划风险管理6 过程2-识别风险6.1 识别风险★★★6.2 数据收集★★★6.3 数据分析★★★…