深度学习-线性代数

server/2024/11/23 23:39:31/

目录

  • 标量
  • 向量
  • 矩阵
    • 特殊矩阵
    • 特征向量和特征值
  • 标量由只有一个元素的张量表示
  • 将向量视为标量值组成的列表
  • 通过张量的索引来访问任一元素
  • 访问张量的长度
  • 只有一个轴的张量,形状只有一个元素
  • 通过指定两个分量m和n来创建一个形状为m×n的矩阵
  • 矩阵的转置
  • 对称矩阵的转置逻辑运算
  • clone()复制一个有相同形状的张量
  • 两个矩阵的按元素乘法称为:哈达玛积⊙
  • 计算元素的和
  • 表示任意形状张量的元素和
    • 参数axis=0求和
    • 参数axis=1求和
    • axis=[0,1] 必须满足三个维度以上
    • 示例说明1
    • 示例说明2
    • 示例说明3
  • 平均值(mean或average)
  • 计算总和或均值时保持轴数不变(即维度不丢失)使用keepdim=True
    • keepdim=True保持唯一,不丢失求和的维度,然后才能使用广播机制
  • 某个轴计算A元素的累积和(即前缀和)
  • 点积dot(参数1,参数2)
  • 矩阵向量积torch.mv(参数1,参数2)
  • 矩阵乘法
  • norm()函数
  • 向量元素的绝对值之和
  • F范式:矩阵元素的平方和的平方根

标量

在这里插入图片描述




向量

在这里插入图片描述


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

矩阵

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


在这里插入图片描述

特殊矩阵

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

特征向量和特征值

在这里插入图片描述




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

import torch
x = torch.tensor([3.0])
y = torch.tensor([2.0])
print(x + y)
print(x * y)
print(x / y)
print(x ** y)

结果:在这里插入图片描述




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

import torch
x = torch.arange(4)
print(x)

结果:在这里插入图片描述




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

import torch
x = torch.arange(4)
print(x[3])

结果:在这里插入图片描述




访问张量的长度

import torch
x = torch.arange(4)
print(len(x))

结果:在这里插入图片描述




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

import torch
x = torch.arange(4)
print(x.shape)

结果:在这里插入图片描述
一个长为1的列表




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

import torch
A = torch.arange(20).reshape((5, 4))
print(A)

结果:在这里插入图片描述




矩阵的转置

import torch
A = torch.arange(20).reshape((5, 4))
print(A.T)

结果:在这里插入图片描述




对称矩阵的转置逻辑运算

import torch
B = torch.tensor([[1, 2, 3], [2, 0, 4], [3, 4, 5]])
print(B == B.T)

结果:
在这里插入图片描述




clone()复制一个有相同形状的张量

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
B = A.clone()
print(A)
print(A + B)

结果:
在这里插入图片描述




两个矩阵的按元素乘法称为:哈达玛积⊙

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
B = A.clone()
print(A*B)

结果:
在这里插入图片描述

import torch
a = 2 #对矩阵中的每个元素+2
x = torch.arange(24).reshape(2, 3, 4) #reshape第一个参数可以看作是“块”或“层”的数量
print(x)
print(a + x)
print((a * x).shape)

结果:
在这里插入图片描述

print(a * x)

在这里插入图片描述




计算元素的和

import torch
x = torch.arange(4, dtype=torch.float32)
print(x)
print(x.sum())

结果:
在这里插入图片描述




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

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
print(A.shape)
print(A.sum())

结果:

在这里插入图片描述

参数axis=0求和

如果是二维则代表沿着行的方向(第一维)进行操作(从上到下)

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
A_sum_axis0 = A.sum(axis=0) 
print(A)
print(A_sum_axis0)
print(A_sum_axis0.shape)

结果:
在这里插入图片描述


参数axis=1求和

如果是二维则代表沿着列的方向(第二维)进行操作(从左到右)

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
A_sum_axis1 = A.sum(axis=1) 
print(A)
print(A_sum_axis1)
print(A_sum_axis1.shape)

结果:
在这里插入图片描述


axis=[0,1] 必须满足三个维度以上

对于三维及三维以上的,三个参数分别代表块/层方向(第一维度)、行方向(第二维度)、列方向(第三维度)
此时,就跟二维的有所区别

二维的:axis=0即第一维度------按行方向操作
        axis=1即第二维度------按列方向操作


三维即三维以上的:
         axis=0 即第一维度------按块/层方向操作
         axis=1 即第二维度------按行方向操作
         axis=2 即第三维度------按列方向操作

示例说明:
在这里插入图片描述





import torch
A = torch.arange(20*2, dtype=torch.float32).reshape(2, 5, 4)
print(A)
print(A.sum(axis=[0, 1]))

结果:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
然后,第一层和第二层求和可得:
在这里插入图片描述

示例说明1

import torch
a = torch.arange(20).reshape((5, 4))
print(a.shape)

显示:在这里插入图片描述


这里我们使用axis=0沿行方向求和(会丢失第一维度):

import torch
a = torch.arange(20).reshape((5, 4))
print(a.sum(axis=0).shape)

结果:在这里插入图片描述


这里我们使用axis=1沿列方向求和(会丢失第二维度):

import torch
a = torch.arange(20).reshape((5, 4))
print(a.sum(axis=1).shape)

结果:在这里插入图片描述


示例说明2

import torch
a = torch.arange(40).reshape((2, 5, 4))
print(a.shape)

显示:在这里插入图片描述


这里我们使用axis=0沿块/层方向求和(会丢失第一维度):

import torch
a = torch.arange(40).reshape((2, 5, 4))
print(a.sum(axis=0).shape)

结果:在这里插入图片描述



这里我们使用axis=1沿行方向求和(会丢失第二维度):

import torch
a = torch.arange(40).reshape((2, 5, 4))
print(a.sum(axis=1).shape)

结果:在这里插入图片描述


这里我们使用axis=2沿列方向求和(会丢失第三维度):

import torch
a = torch.arange(40).reshape((2, 5, 4))
print(a.sum(axis=2).shape)

结果:在这里插入图片描述


这里我们使用axis=[1, 2]沿行和列方向求和(会丢失第二、三维度):

import torch
a = torch.arange(40).reshape((2, 5, 4))
print(a.sum(axis=[1, 2]).shape)

结果:在这里插入图片描述


这里我们可以发现是先按照行方向求和计算,之后根据行方向计算的结果进行列方向求和计算。

import torch
a = torch.arange(40).reshape((2, 5, 4))
print(a)
print(a.sum(axis=1))
print(a.sum(axis=[1, 2]))
print(a.sum(axis=[1, 2]).shape)

结果:
在这里插入图片描述



示例说明3

keepdim=True使其不丢失维度,将维度变为1

import torch
a = torch.arange(40).reshape((2, 5, 4))
print(a.sum(axis=1, keepdims=True).shape)

结果:在这里插入图片描述


import torch
a = torch.arange(40).reshape((2, 5, 4))
print(a.sum(axis=[1, 2], keepdims=True).shape)

结果:在这里插入图片描述




平均值(mean或average)

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
print(A.mean())
print(A.sum()/A.numel())

结果:
在这里插入图片描述




import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
print(A)
print(A.mean(axis=0))

结果:
在这里插入图片描述




import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
print(A)
print(A.sum(axis=0)/A.shape[0]) #求和的那个维度丢掉了,即按行方向的维度丢掉了

结果:
在这里插入图片描述
A.shape[0]表示第一个维度(行方向)的元素数
所以用A.shape[1]测试一下是不是元素数

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
print(A)
print(A.sum(axis=1)/A.shape[1]) #求和的那个维度丢掉了,即按列方向的维度丢掉了

在这里插入图片描述




计算总和或均值时保持轴数不变(即维度不丢失)使用keepdim=True

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
sum_A = A.sum(axis=1, keepdim=True)
print(sum_A)

结果:

在这里插入图片描述
当调用.sum()方法(或类似的聚合方法,如.mean()、.max()等)时,你可以选择是否保持被聚合维度的形状。keepdim=True是一个参数,当设置为True时,它会使得聚合操作后的张量在被聚合的维度上仍然保持一个大小为1的维度,而不是完全去除这个维度。

keepdim=True保持唯一,不丢失求和的维度,然后才能使用广播机制

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
sum_A = A.sum(axis=1, keepdim=True)
print(A)
print(sum_A)
print(A/sum_A)

在这里插入图片描述




某个轴计算A元素的累积和(即前缀和)

累积和的意思是,对于每个位置,你会将该位置及其之前所有位置上的元素相加。第一个位置的元素保持不变(因为没有之前的元素可以相加),之后的每个位置的元素都是它自身和它之前所有元素的和。

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
print(A.cumsum(axis=0))

结果:
在这里插入图片描述




点积dot(参数1,参数2)

torch.dot只能对一维向量做点积

import torch
x = torch.arange(4, dtype=torch.float32)
print(x)
y = torch.ones(4, dtype=torch.float32)
print(y)
print(torch.dot(x, y))

结果:
在这里插入图片描述




矩阵向量积torch.mv(参数1,参数2)

在这里插入图片描述
A是一个m×n的矩阵,x是一个n×1的一列,所以得到一个m的列向量。
m列中第i个元素是点积 a i T a_i^T aiTx

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
x = torch.arange(4, dtype=torch.float32)
print(A.shape)
print(x.shape)
print(torch.mv(A, x))

结果:
在这里插入图片描述




矩阵乘法

矩阵乘法可以看作执行n次矩阵的向量积,然后拼接在一块,形成一个m×n的矩阵。
A:m×q的矩阵
B:q×n的矩阵
AB:m×n的矩阵

import torch
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
B = torch.ones(4, 3)
print(torch.mm(A, B))

结果:
在这里插入图片描述




norm()函数

第二范数是向量元素平方和的平方根
在这里插入图片描述

import torch
u = torch.tensor([3.0, -4.0])
print(torch.norm(u))

结果:在这里插入图片描述




向量元素的绝对值之和

在这里插入图片描述

import torch
u = torch.tensor([3.0, -4.0])
print(torch.abs(u).sum())

结果:在这里插入图片描述




F范式:矩阵元素的平方和的平方根

在这里插入图片描述

import torch
print(torch.norm(torch.ones((4, 9))))

结果:在这里插入图片描述


http://www.ppmy.cn/server/20892.html

相关文章

主题乐园私域精细化运营

主题乐园私域精细化运营是指在细分用户群体的基础上,通过个性化、精准的运营方式,为用户提供定制化服务和体验。以下是一些常见的主题乐园私域精细化运营玩法: 会员制度和会员专属服务:建立完善的会员制度,为会员提供专…

Linux 环境变量的增删改

写在前面: 本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。 目录 shell 和 bash获…

docker容器技术篇:容器集群管理实战mesos+zookeeper+marathon(一)

容器集群管理实战mesoszookeepermarathon(一) mesos概述 1.1 Mesos是什么 Apache Mesos 是一个基于多资源调度的集群管理软件,提供了有效的、跨分布式应用或框架的资源隔离和共享,可以运行 Hadoop、Spark以及docker等。 1.2 为…

程序会自己抛出错误,干嘛还要写try catch?

抛出问题 以前一直困惑,在下面的代码中,进行try catch的意义是什么?js引擎不是会自己抛出错误吗?为什么还要多此一举手动捕获打印呢? const TodoListContainer () > {const [todos, setTodos] useState([]);use…

ArcGIS无法开始编辑TIN!开始编辑TIN显示灰色

ArcGIS无法开始编辑TIN!开始编辑TIN显示灰色? 解决方案! 1、确认自定义——扩展模块中空间分析、3D分析模块勾选。 2、确认以上后,还是不能编辑的话,我们可以调出 3D分析分析工具条,你就会发现。TIN编辑工…

等价类划分发案例

用等价类划分法设计如下案例, 同时编写测试用例 学生姓名: 2到6个汉字;登录密码: 长度大于等于6位,小于等于10位, 密码中只能出现数字或者英文字母或者下划线;两个自然数相除: 除数不能为0; 自然数解释: 自然数是全体非负整数组成的集合, 学生姓名 有效 张三 无效 张 张…

Docker之常见FAQ记录清单

一、前言 本文记录Docker使用过程中遇见的问题,供后续回顾参考。 关联资源:网络Docker博客、官方FAQ、文档、Docker 从入门到实践、中文社区、riptutorial 二、问题及处理记录 2.1、docker容器内没有vi,nano等编辑器 1)如果宿主机本地有&a…

css文字和span在一行对不齐

1.需求背景 父盒子中有两个span,但是span中的文字对不齐。如下图,明显右边的文字偏高 处理后的效果(已经对齐,图中标记的是基本的div结构): 2.该问题出现的原因: span1设置的高度比span2内…