首页 > 其他分享 >动手学深度学习Pytorch 2.3线性代数-笔记

动手学深度学习Pytorch 2.3线性代数-笔记

时间:2024-03-12 23:59:07浏览次数:26  
标签:tensor sum torch 张量 print Pytorch 线性代数 2.3 True

标量

标量——仅包含一个数值,由只有一个元素的张量表示

变量——未知的标量值

例,将华氏度值转换为摄氏度的计算表达式​,其中5、9、32为标量,c和f为变量。

实例化两个标量并进行算术运算

 import torch
 ​
 x = torch.tensor(3.0)
 y = torch.tensor(2.0)
 print(x + y, x * y, x / y, x ** y)
 ​
 #结果
 #tensor(5.) tensor(6.) tensor(1.5000) tensor(9.)

向量

向量——标量值组成的列表,用一维张量表示,默认为列向量

向量的元素分量——组成向量的标量值,通过张量的索引来访问

向量或轴的维度——向量或轴的长度,即向量的元素数量

张量的维度——张量具有的轴数

张量的某个轴的维数就是这个轴的长度。

 x=torch.arange(4)
 print(x)
 print(x[3])
 print(len(x))#向量的长度
 print(x.shape)#也可通过shape属性访问
 ​
 #结果
 #tensor([0, 1, 2, 3])
 #tensor(3)
 #4
 #torch.Size([4])

矩阵

 A = torch.arange(6).reshape(3, 2)#创建3×2的矩阵
 print(A)
 print(A.T)#矩阵的转置
 ​
 #结果
 #tensor([[0, 1],
 #        [2, 3],
 #        [4, 5]])
 #tensor([[0, 2, 4],
 #        [1, 3, 5]])

对称矩阵——方阵的特殊类型,B=BT

 B = torch.tensor([[1, 2, 3], [2, 0, 4], [3, 4, 5]])
 print(B)
 print(B==B.T)
 ​
 #结果
 #tensor([[1, 2, 3],
 #        [2, 0, 4],
 #        [3, 4, 5]])
 #tensor([[True, True, True],
 #        [True, True, True],
 #        [True, True, True]])

矩阵中的行向量更多对应于数据样本,列对应于样本的不同属性。

矩阵-向量积(mv函数)

 a=torch.arange(2,dtype=torch.float32)
 print(A.shape, a.shape)
 print(torch.mv(A, a))#A的列维数(沿轴1的长度)必须与x的维数(其长度)相同
 ​
 #结果
 #torch.Size([3, 2]) torch.Size([2])
 #tensor([1., 3., 5.])

矩阵乘法(mm函数)

注意与Hadamard积(下文有介绍)区分开

 B = torch.ones(2, 3)
 print(torch.mm(A, B))
 ​
 #结果
 #tensor([[1., 1., 1.],
 #        [5., 5., 5.],
 #        [9., 9., 9.]])

张量

 X = torch.arange(12).reshape(2, 3, 2)#创建具有两个轴的张量
 print(X)
 ​
 #结果
 #tensor([[[ 0,  1],
 #         [ 2,  3],
 #         [ 4,  5]],
 #
 #        [[ 6,  7],
 #         [ 8,  9],
 #         [10, 11]]])

张量算法的基本性质

任何按元素的一元运算都不会改变其操作数的形状。

具有相同形状的任意两个张量按元素二元运算的结果都将是相同形状的张量。

 A = torch.arange(6, dtype=torch.float32).reshape(3, 2)
 B = A.clone()  # 通过分配新内存,将A的一个副本分配给B
 print(A)
 print(A + B)
 ​
 #结果
 #tensor([[0., 1.],
 #        [2., 3.],
 #        [4., 5.]])
 #tensor([[ 0.,  2.],
 #        [ 4.,  6.],
 #        [ 8., 10.]])

 print(A * B)
 ​
 #结果
 #tensor([[ 0.,  1.],
 #        [ 4.,  9.],
 #        [16., 25.]])

张量乘以或加一个标量,其形状不会改变,其每个元素都与标量相加或相乘。

 a = 2
 X = torch.arange(12).reshape(2, 3, 2)
 print(a + X)
 print((a * X).shape)
 ​
 #结果
 #tensor([[[ 2,  3],
 #         [ 4,  5],
 #         [ 6,  7]],
 #
 #        [[ 8,  9],
 #         [10, 11],
 #         [12, 13]]])
 #torch.Size([2, 3, 2])

降维

求和降维:默认情况下,调用求和函数会沿所有的轴降低张量的维度,使其变为一个标量。

也可以指定张量沿哪一个轴通过求和降低维度。

 A_sum_axis0 = A.sum(axis=0)#对矩阵A的0轴所有元素求和
 print(A_sum_axis0, A_sum_axis0.shape)
 ​
 A_sum_axis1 = A.sum(axis=1)#对所有列(轴1)降维
 print(A_sum_axis1, A_sum_axis1.shape)
 ​
 print(A.sum(axis=[0,1])==A.sum())#沿着行和列对矩阵求和,等价于对矩阵的所有元素进行求和
 ​
 #结果
 #tensor([6., 9.]) torch.Size([2])#矩阵沿0轴降维,生成输出向量,输入轴0的维数在输出形状中消失
 #tensor([1., 5., 9.]) torch.Size([3])
 #tensor(True)

计算平均值:总和除以元素总数。计算平均值的函数也可以沿指定轴降低张量的维度。

 print(A.mean(), A.sum()/A.numel())
 #结果
 #tensor(2.5000) tensor(2.5000)
 ​
 print(A.mean(axis=0), A.sum(axis=0) / A.shape[0])#沿指定轴降低维度
 #结果
 #tensor([2., 3.]) tensor([2., 3.])

非降维求和

有些情况下,求和和均值时保持轴数不变会更有用。比如可以通过广播将A除以sum_A。

sum_A=A.sum(axis=1,keepdim=True)
print(sum_A)
print(A/sum_A)
​
#结果
#tensor([[1.],
#        [5.],
#        [9.]])
#tensor([[0.0000, 1.0000],
#        [0.4000, 0.6000],
#        [0.4444, 0.5556]])

cumsum函数:沿某个轴计算元素的累积总和,不会降低输入张量的维度。

print(A.cumsum(axis=0))
 ​
#结果
#tensor([[0., 1.],
#        [2., 4.],
#        [6., 9.]])
#      0+2+4, 1+3+5

点积

torch.dot():相同位置的按元素乘积的和

y=torch.ones(4,dtype=torch.float32)
print(x,y)
print(torch.dot(x.float(),y))# dot的两个参数的数据类型要相同。x的数据类型原本为Long,需要转化为float类型。
 ​
#结果
#tensor([0, 1, 2, 3]) tensor([1., 1., 1., 1.])
#tensor(6.)

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

print(torch.sum(x * y))
 ​
#结果
#tensor(6.)

范数

范数——表示一个向量的大小(不涉及维度,是分量的大小)

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

#结果
#tensor(5.)

print(torch.abs(u).sum())
 ​
#结果
#tensor(7.)

print(torch.norm(torch.ones((4, 9))))
 ​
#结果
#tensor(6.)

标签:tensor,sum,torch,张量,print,Pytorch,线性代数,2.3,True
From: https://blog.csdn.net/fbhc_4444X_/article/details/136666595

相关文章

  • 深度学习1:PyTorch张量tensor的基本使用
    深度学习是一种机器学习方法,同时与人工智能研究的范畴。文章目录1.深度学习的基础网络2.Pytorch的开发环境(PyCharm和PyTorch安装)3.张量基础3.1张量的定义3.2随机生成张量3.3张量的数据类型3.4张量形状3.5张量切片3.6全0全1张量4.张量的数学函数4.1sum()--求......
  • 探索PyTorch:介绍及常用工具包展示
    前言PyTorch作为一个强大的开源深度学习框架,近年来在科学计算和人工智能领域备受欢迎。它提供了灵活的张量计算和动态计算图的功能,使得构建和训练深度神经网络变得更加简单和高效。本文将介绍PyTorch的基本概念,并展示一些常用的PyTorch工具包,帮助读者更好地了解和利用PyTorch进......
  • 线性代数
    参考线性代数及其应用(原数第6版)。第1章线性代数中的线性方程组1.1线性方程组包含变量\(x_1,x_2,\cdots,x_n\)的线性方程是形如\[a_1x_1+a_2x_2+\cdots+a_nx_n=b\]的方程,其中\(b\)与系数\(a_1,a_2,\cdots,a_n\)为实数或复数,\(n\)可以是任意正整数。线性方程组是......
  • pytorch_lightning的使用
    Reference1.【PyTorchLigntning】快速上手简明指南2.PytorchLightning完全攻略3.PyTorchLightning教程四:超参数的使用4.小风_的CSDN......
  • 【软件安装】pytorch安装(windows10,pip版)
    前提必须先安装cuda与cudnn,教程:cuda与cudnn部署安装同时确认你的CUDA版本,nvidia-smi:确认版本是12.4,继续往下走安装pytorch前往官网,并且往下滑动,直到你看见INSTALLPYTORCH:PyTorch看左下角的PreviousversionsofPyTorch,点进去:这里显示最新的是v2.2.0版本,咱就下这个,按设......
  • Pytorch学习笔记
    PyTorch学习教程1-安装PyTorchPyTorch安装官网选择对应的版本进行下载链接的复制(注意CUDA版本和DriverVersion版本的一致性)注意conda需要换源换源后直接使用下面的指令。condainstallpytorchtorchvisiontorchaudiopytorch-cuda=11.8-cpytorch-cnvidia以下是注......
  • 线性代数——平面向量 学习笔记
    线性代数——平面向量学习笔记首发于洛谷。定义及用语说明无特殊说明,下文的向量均指自由向量且是平面向量。向量,英文名为vector,目前没有准确而统一的中文翻译。在物理学科,一般翻译成「矢量」,且与「标量」一词相对。在数学学科,一般直接翻译成「向量」。对于向量的乘法:......
  • Windows环境下Pytorch项目搭建在Docker中运行
    Windows环境下Pytorch项目搭建在Docker中运行1.安装windows版本的Docker​ 网上已有诸多博客教程,这里就不再赘述。2.搭建本地Pytorch环境​ 搭建本地Pytorch环境的方式我使用了两种方式,推荐使用第一种。​ 第一种:​ (1)在dockerhub中(https://hub.docker.com),找到自己版本......
  • pytorch报错:Variable._execution_engine.run_backward( # Calls into the C++ engine
    GPU模式下运行pytorch代码报错,pytorch为2.2.1,NVIDIA驱动版本535.161.07File"/home/devil/anaconda3/envs/sample-factory/lib/python3.11/site-packages/torch/_tensor.py",line522,inbackwardtorch.autograd.backward(File"/home/devil/anaconda3/envs/sample-......
  • Pytorch中张量的高级选择操作
    在某些情况下,我们需要用Pytorch做一些高级的索引/选择,所以在这篇文章中,我们将介绍这类任务的三种最常见的方法:torch.index_select,torch.gatherandtorch.take我们首先从一个2D示例开始,并将选择结果可视化,然后延申到3D和更复杂场景。最后以表格的形式总结了这些函数及其区别。......