




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2.3PyTorch基本使用2.3.1张量2.3.2数学运算2.3.3数理统计2.3.1张量PyTorch的运算单元叫作张量(tensor)。我们可以将张量理解为一个多维数组,一阶张量即为一维数组,通常叫作向量(vector);二阶张量即为二维数组,通常叫作矩阵(matrix);三阶张量即为三维数组;n阶张量即为n维数组,如图所示。张量的定义图2.1832位浮点型torch.FloatTensor。64位整型
torch.LongTensor。32位整型torch.IntTensor。Tensor的基本数据类型16位整型torch.ShortTensor。64位浮点型torch.DoubleTensor。1.初始化张量(1)通过基础构造函数创建张量(2)通过数据创建张量(3)根据另一个张量创建(4)使用随机或恒定值创建1.初始化张量(1)通过基础构造函数创建张量例如:构造一个3×4的张量,代码如下:importtorchtensor=torch.Tensor(3,4)print(tensor)运行结果如下:tensor([[0.0000e+00,0.0000e+00,0.0000e+00,0.0000e+00],[-1.7160e+18,0.0000e+00,0.0000e+00,0.0000e+00],[0.0000e+00,0.0000e+00,0.0000e+00,0.0000e+00]])1.初始化张量(2)通过数据创建张量张量可以直接从数据中创建,其数据类型是自动推断的,代码如下:importtorchdata=[[3,4],[5,6]]t_data=torch.tensor(data)print(f"TensorfromData:\n{t_data}\n")程序运行结果如下:TensorfromData:tensor([[3,4],[5,6]])1.初始化张量(3)根据另一个张量创建新张量保留参数张量的属性(形状、数据类型),除非显式覆盖。data=[[3,4],[5,6]]t_data=torch.tensor(data)t_ones=torch.ones_like(t_data)#保留原有张量的形状和数据类型print(f"t_onesTensor:\n{t_ones}\n")t_rand=torch.rand_like(t_data,dtype=torch.float)#显式更改张量的数据类型print(f"t_randTensor:\n{t_rand}\n")程序运行结果如下:t_onesTensor:tensor([[1,1],[1,1]])t_randTensor:tensor([[0.2152,0.6244],[0.1523,0.7312]])1.初始化张量(4)使用随机或恒定值创建使用随机或恒定值创建张量,其中参数shape是张量维度的元组,它决定了输出张量的形状。代码如下:shape=(2,3,)#创建2行3列的张量rand_tensor=torch.rand(shape)ones_tensor=torch.ones(shape)zeros_tensor=torch.zeros(shape)#输出各个张量的值print(f"rand_tensor:\n{rand_tensor}\n")print(f"ones_tensor:\n{ones_tensor}\n")print(f"zeros_tensor:\n{zeros_tensor}")程序运行代码如下:rand_tensor:tensor([[0.1750,0.1384,0.7738],[0.8761,0.5739,0.1595]])ones_tensor:tensor([[1.,1.,1.],[1.,1.,1.]])zeros_tensor:tensor([[0.,0.,0.],[0.,0.,0.]])2.张量相关的属性张量属性包括形状、数据类型和存储设备等,下面我们通过程序输出相关的属性,代码如下:importtorchtensor=torch.rand(2,4)print(f"Shapeoftensor:{tensor.shape}")print(f"Datatypeoftensor:{tensor.dtype}")print(f"Devicetensorisstoredon:{tensor.device}")程序运行代码如下:Shapeoftensor:torch.Size([2,4])Datatypeoftensor:torch.float32Devicetensorisstoredon:cpu3.张量的操作(1)将张量移动到GPU上(2)索引和切片操作(3)连接张量3.张量的操作(1)将张量移动到GPU上,代码如下:tensor=torch.rand(2,4)print(f"Shapeoftensor:{tensor.shape}")print(f"Datatypeoftensor:{tensor.dtype}")print(f"Devicetensorisstoredon:{tensor.device}")#将张量移动到GPU上iftorch.cuda.is_available():tensor=tensor.to("cuda")#输出张量所在存储设备print(f"Devicetensorisstoredon:{tensor.device}")程序运行代码如下:Shapeoftensor:torch.Size([2,4])DShapeoftensor:torch.Size([2,4])Datatypeoftensor:torch.float32Devicetensorisstoredon:cpuDevicetensorisstoredon:cuda:03.张量的操作(2)索引和切片操作张量的索引和切片类似numpy的索引和切片,代码如下:#索引和切片data=[[1,2,3],[4,5,6],[7,8,9]]t_data=torch.tensor(data)print(f"张量数据为:\n{t_data}\n")print(f"第一行:{t_data[0]}")print(f"第一列:{t_data[:,0]}")print(f"最后一列:{t_data[...,-1]}")t_data[:,1]=0#将第二列的数据赋值为0print(t_data)程序运行代码如下:张量数据为:tensor([[1,2,3],[4,5,6],[7,8,9]])第一行:tensor([1,2,3])第一列:tensor([1,4,7])最后一列:tensor([3,6,9])tensor([[1,0,3],[4,0,6],[7,0,9]])3.张量的操作(3)连接张量在程序中可以用torch.cat或torch.stack来拼接张量,代码如下:。data=[[1,2,3],[4,5,6],[7,8,9]]t_data=torch.tensor(data)t1=torch.cat([t_data,t_data,t_data],dim=1)#在第1个维度拼接,即水平方向print(t1)程序输出结果如下:tensor([[1,2,3,1,2,3,1,2,3],[4,5,6,4,5,6,4,5,6],[7,8,9,7,8,9,7,8,9]])4.张量与Numpy在CPU上的张量和NumPy数组共享它们的内存位置,改变一个会导致另一个数据也变化。张量转换为NumPy数组的代码如下:importtorchimportnumpyasnptensor=torch.ones(2,3)print(f"tensor的值为:{tensor}")num=tensor.numpy()print(f"num的值为:{num}")程序运行结果如下:tensor的值为:tensor([[1.,1.,1.],[1.,1.,1.]])num的值为:[[1.1.1.][1.1.1.]]4.张量与Numpy改变张量的值,numpy数组的值也随之更改,代码如下:importtorchimportnumpyasnptensor=torch.ones(2,3)print(f"tensor的值为:{tensor}")num=tensor.numpy()print(f"num的值为:{num}")#改变第二行的值tensor[1,:]=3print(f"修改后tensor的值为:{tensor}")print(f"修改后num的值为:{num}")程序运行结果如下:tensor的值为:tensor([[1.,1.,1.],[1.,1.,1.]])num的值为:[[1.1.1.][1.1.1.]]修改后tensor的值为:tensor([[1.,1.,1.],[3.,3.,3.]])修改后num的值为:[[1.1.1.][3.3.3.]]4.张量与Numpy将NumPy数组num转换为张量,代码如下:tensor1=torch.from_numpy(num)print(f"tensor1的值:{tensor1}")改变numpy数组的值,张量的值也会发生改变,代码如下:tensor1=torch.from_numpy(num)print(f"tensor1的值:{tensor1}")np.add(num,3,out=num)print(f"修改后num的值:{num}")print(f"修改后tensor1的值:tensor1")程序运行结果如下:tensor1的值:tensor([[1.,1.,1.],[3.,3.,3.]])修改后num的值:[[4.4.4.][6.6.6.]]修改后tensor1的值:tensor([[4.,4.,4.],[6.,6.,6.]])5.单元素张量只有一个值的张量,可以通过item属性转换为数值,接着上面的操作添加如下代码:agg=tensor1.sum()agg_item=agg.item()print(agg_item,type(agg_item))程序运行结果为:30.0<class'float'>2.3.1
张量(1)初始化张量(2)张量的相关属性(3)张量的操作(4)张量与numpy(5)单元素张量2.3.2数学运算(1)矩阵相加(2)矩阵相乘(3)矩阵对应元素相乘(4)绝对值函数(5)就地操作(1)矩阵相加在PyTorch中可以通过“+”和“torch.add(参数)”方法实现矩阵相加操作,代码如下:importtorcht1=torch.ones(2,3)t2=torch.ones(2,3)t3=t1+t2;print(t3)t4=torch.add(t1,t2)print(t4)程序运行结果如下:tensor([[2.,2.,2.],[2.,2.,2.]])tensor([[2.,2.,2.],[2.,2.,2.]])2.3.2数学运算(2)矩阵相乘矩阵相乘可以使用@,或者matmul方法,示例代码如下:importtorchtensor=torch.ones(3,3)#矩阵相乘,y1、y2和y3的值相同y1=tensor@tensor.Ty2=tensor.matmul(tensor.T)y3=torch.rand_like(tensor)torch.matmul(tensor,tensor.T,out=y3)print(y1)print(y2)print(y3)程序运行结果如下:tensor([[3.,3.,3.],[3.,3.,3.],[3.,3.,3.]])tensor([[3.,3.,3.],[3.,3.,3.],[3.,3.,3.]])tensor([[3.,3.,3.],[3.,3.,3.],[3.,3.,3.]])2.3.2数学运算(3)矩阵对应元素相乘矩阵中相对应位置上的元素相乘可以使用“*”或mul方法来实现,代码如下:z1=y1*y2z2=y2.mul(y1)print(z1)print(z2)程序运行结果如下:tensor([[9.,9.,9.],[9.,9.,9.],[9.,9.,9.]])tensor([[9.,9.,9.],[9.,9.,9.],[9.,9.,9.]])2.3.2数学运算(4)绝对值函数计算输入张量中每个元素的绝对值可以采用torch.abs(input,out=None),代码如下:t1=torch.abs(torch.FloatTensor([-8,-2,-4]))print(t1)程序运行结果如下:tensor([8.,2.,4.])2.3.2数学运算(5)就地操作将结果存储到操作数中的操作称为就地操作。它们由_后缀表示。例如:x.copy_(y),x.t_(),会变x的值。t1=torch.abs(torch.FloatTensor([-8,-2,-4]))print(t1)t1.add_(4)print(t1)程序运行结果如下:tensor([8.,2.,4.])tensor([12.,6.,8.])2.3.2数学运算1.统计函数2.分布函数3.随机函数2.3.3数理统计(1)最小值(2)最大值(3)中位数(4)平均值(5)标准差(6)方差(7)众数(8)分位数(9)累计求积1.统计函数(1)最小值:min()/amin()/argmin()/minimum()min返回最小值和对应的索引,amin返回最小值,argmin返回索引。函数如下:torch.min(input,dim,keepdim=False,*,out=None)torch.amin(input,dim,keepdim=False,*,out=None)torch.argmin(input,dim=None,keepdim=False)1.统计函数示例代码如下:importtorchx=torch.tensor([[6,3,9],[4,5,6]])#返回每行中的最小值和索引values,index=torch.min(x,dim=1)print(values,index)#返回每行中的最小值values=torch.amin(x,dim=1)print(values)#返回每行中最小值的索引index=torch.argmin(x,dim=1)print(index)程序运行结果如下:tensor([3,4])tensor([1,0])tensor([3,4])tensor([1,0])1.统计函数1.统计函数比较两个张量,并返回对应位置的最小值,使用minimum()函数,示例代码如下:importtorcha=torch.tensor((6,3,9))b=torch.tensor((4,5,6))c=torch.minimum(a,b)print(c)程序运行结果如下:tensor([4,3,6])1.统计函数(2)最大值:max()/amax()/argmax()/maximum()max返回最大值和对应的索引,amax返回最大值,argmax返回索引.函数定义如下:torch.max(input,dim,keepdim=False,*,out=None)torch.amax(input,dim,keepdim=False,*,out=None)torch.argmax(input,dim=None,keepdim=False)1.统计函数示例代码如下:x=torch.tensor([[6,3,9],[4,5,6]])#返回每行中的最大值和索引values,index=torch.max(x,dim=1)print(values,index)#返回每行中的最大值values=torch.amax(x,dim=1)print(values)#返回每行中最大值的索引index=torch.argmax(x,dim=1)print(index)运行结果如下:tensor([9,6])tensor([2,2])tensor([9,6])tensor([2,2])1.统计函数比较两个张量,返回对应位置上的最大值使用maximum()函数,代码如下:a=torch.tensor((6,3,9))b=torch.tensor((4,5,6))c=torch.maximum(a,b)print(c)运行结果如下:tensor([6,5,9])1.统计函数该函数支持广播机制,可返回两个不同形状的张量中相同位置的最大值,代码如下:importtorchx1=torch.tensor([[1,2,4],[10,11,12]])x2=torch.tensor([[4,5,6]])y=torch.maximum(x1,x2)print(y)运行结果如下:tensor([[4,5,6],[10,11,12]])1.统计函数(3)中位数:median()/nanmedian()median()函数用于返回所有元素的中位数函数定义如下:torch.median(input,dim=-1,keepdim=False,*,out=None)1.统计函数示例代码如下:importtorchx=torch.tensor([[1.0,2.0,3.0]])y=torch.median(x)print(y)#tensor(2.)1.统计函数如果共有偶数个元素,则会有两个中位数,返回较小的那一个。importtorchx=torch.tensor([[1.0,2.0,3.0,4.0]])y=torch.median(x)print(y)#tensor(2.)1.统计函数返回指定维度的元素的中位数。importtorchx=torch.tensor([[1,-3,5],[7,0,2]])y=torch.median(x,1)print(y[0])#tensor([1,2])中位数print(y[1])#tensor([0,2])对应的索引1.统计函数如果元素中有nan,则返回nan。importtorchx=torch.tensor([1.0,torch.nan,2.0])y=torch.median(x)print(y)#tensor(nan)1.统计函数如果张量中有nan元素,则忽略,采用nanmedian()函数,代码如下:importtorchx=torch.tensor([1.0,torch.nan,2.0])y=torch.nanmedian(x)print(y)#tensor(1.)1.统计函数(4)平均值mean()/nanmean()计算所有元素或指定维度的元素的均值采用mean()函数其定义如下:torch.mean(input,dim,keepdim=False,*,dtype=None,out=None)1.统计函数示例代码如下:importtorchx=torch.tensor([[1.0,2.0],[3.0,2.0]])y=torch.mean(x)#y=x.mean()print(y)#tensor(2.)importtorchx=torch.tensor([[1.0,2.0],[3.0,2.0]])y=torch.mean(x,axis=1)#y=x.mean(dim=1)print(y)#tensor([1.5000,2.5000])1.统计函数如果值中有nan,则均值返回nan,代码如下。importtorchx=torch.tensor([[torch.nan,2.0],[3.0,2.0]])y=torch.mean(x)print(y)#tensor(nan)1.统计函数计算指定维度的非nan元素的均值,可以采用nanmean()函数,代码如下:importtorchx=torch.tensor([[torch.nan,2.0],[3.0,2.0]])y=torch.nanmean(x,dim=1)#y=x.nanmean(dim=1)print(y)#tensor([2.0000,2.5000])1.统计函数(5)求和
sum()/nansum()/cumsum()计算指定维度的元素的和,采用sum()函数其定义如下:torch.sum(input,dim,keepdim=False,*,dtype=None)示例代码如下:importtorchx=torch.tensor([[1,2],[3.,4.]])y=torch.sum(x,axis=0)print(y)#tensor([4.,6.])1.统计函数计算指定维度的非nan元素的和,采用nansum()函数示例代码如下:importtorchx=torch.tensor([[1,2],[3.,float("nan")]])y=torch.nansum(x)print(y)#tensor(6.)1.统计函数在指定的维度累计求和需要指定dim参数,示例代码如下:importtorchx=torch.tensor([[1,2],[3.,float("nan")]])y=torch.nansum(x,dim=1)print(y)#tensor([3.,3.])1.统计函数累计求和采用cumsum函数,cumsum函数示例代码如下:importtorchx=torch.tensor([[1,2],[3.,4.]])y=torch.cumsum(x,axis=0)print(y)#tensor([[1.,2.],[4.,6.]])1.统计函数(6)标准差:std()定义如下:torch.std(input,dim,unbiased,keepdim=False,*,out=None)示例代码如下:importtorchx=torch.tensor([[1,2],[3.,4.]])y=torch.std(x,dim=0)print(y)#tensor([1.4142,1.4142])1.统计函数(7)方差:var()定义如下:torch.var(input,dim,unbiased,keepdim=False,*,out=None)示例代码如下:importtorchx=torch.tensor([[1,2],[3.,4.]])y=torch.var(x,dim=0)print(y)#tensor([2.,2.])1.统计函数(8)众数:mode()torch.mode(input,dim)返回的是指定维度的众数的还有该众数的索引;示例代码如下:importtorchx=torch.tensor([1,2,2,3,3,3])values,index=torch.mode(x)print(values)#tensor(3)众数print(index)#tensor(5)最后一次出现的位置1.统计函数(9)分位数quantile()/unquantile()定义如下:torch.quantile(input,q,dim=None,keepdim=False,*,out=None)示例代码如下:importtorchx=torch.tensor([1.,2.,3.,4.,5.])q=torch.tensor([0.25,0.5,0.75])y=torch.quantile(x,q,dim=0,keepdim=True)print(y)#tensor([[2.],[3.],[4.]])1.统计函数使用nanquantile()函数忽略掉nan值,去求分位数,示例代码如下:importtorchx=torch.tensor([1.,2.,3.,4.,5.,float('nan')])q=torch.tensor([0.25,0.5,0.75])y=torch.quantile(x,q,dim=0,keepdim=True)print(y)#tensor([[2.],[3.],[4.]])1.统计函数(10)累计求积:prod()定义如下:d(input,dim,keepdim=False,*,dtype=None)示例代码如下:importtorchx=torch.tensor([1.,2.,3.])y=d(x)print(y)#tensor(6.)#计数:count_nonzero()#torch.count_nonzero(input,dim=None)importtorchx=torch.tensor([[1,2,0],[3.,4.,0]])y=torch.count_nonzero(x,dim=0)print(y)#tensor([2,2,0])2.分布函数(1)正态分布函数(2)伯努利分布函数(3)泊松分布函数(4)多元正态分布函数2.分布函数(1)正态分布:normal()正态分布函数mormal()的定义如下:torch.normal(mean,std,*,generator=None,out=None)该函数返回一个张量,包含从给定参数means,std的离散正态分布中抽取随机数。使用该函数的示例代码如下:importtorchx=torch.normal(mean=torch.arange(1.,6.),std=torch.arange(1,0,-0.2))print(x)#tensor([1.7975,1.8425,3.0575,3.3935,5.3791])2.分布函数共享均值的代码如下:importtorchx=torch.normal(mean=1.,std=torch.arange(1,0,-0.2))print(x)#tensor([1.9187,1.1210,0.3641,0.9876,1.2493])共享标准差的代码如下:importtorchx=torch.normal(mean=torch.arange(1,0,-0.2),std=1.)print(x)#tensor([0.5276,1.8708,-1.4019,-0.7807,1.0124])2.分布函数(2)伯努利分布:bernoulli()伯努利分布函数bernoulli()的定义如下:torch.bernoulli(input,*,generator=None,out=None)根据随机矩阵,值为(0,1),产生随机数0或1。importtorchx=torch.empty(3,3).uniform_(0,1)y=torch.bernoulli(x)print(x)print(y)运行结果:tensor([[0.8473,0.8749,0.6483],[0.2148,0.9493,0.0121],[0.1809,0.1877,0.2927]])tensor([[1.,1.,1.],[0.,1.,0.],[1.,1.,1.]])2.分布函数对于1值输入,伯努利返回的也是1值。importtorchx=torch.ones(2,2)y=torch.bernoulli(x)print(x)print(y)运行结果:tensor([[1.,1.],[1.,1.]])tensor([[1.,1.],[1.,1.]])2.分布函数对于0值输入,伯努利返回的也是0值。importtorchx=torch.zeros(2,2)y=torch.bernoulli(x)print(x)print(y)运行结果:tensor([[0.,0.],[0.,0.]])tensor([[0.,0.],[0.,0.]])2.分布函数(3)泊松分布:poisson()泊松分布函数的定义如下:torch.poisson(input,generator=None)使用泊松分布的示例代码如下:importtorchx=torch.rand(2,2)*5y=torch.poisson(x)print(x)#tensor([[2.0526,3.9384],[1.0724,2.4068]])2.分布函数(4)多元正态分布:multinomial()多
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度环保节能技术改造股权合作协议
- 二零二五年度合伙美发店营销合作合同协议
- 2025年度高校毕业生就业协议书官方范本
- 二零二五年度学徒工实习协议书范本(新材料研发领域)
- 二零二五年度精密仪器质检员劳动合同
- 二零二五年度XX房地产公司收取管理费合作协议
- 二零二五年度华担保合同:为文化产业发展提供担保服务
- 先进经验交流发言稿
- 2025年沈阳货运从业考试试题题库大全
- 箱式变压器安装施工方案
- 基于单片机的电子广告牌设计毕业设计论文
- 中国联通IMS接口规范 第三分册:Sh接口 V1.0
- 环境化学物的毒性作用及其影响因素
- Q∕GDW 12176-2021 反窃电监测终端技术规范
- 判断抽样(课堂PPT)
- 简明疼痛评估量表(BPI)
- QUY400t性能表履带起重机
- 通用横版企业报价单模板
- 国际网联ITF教练员标准教材(共13页)
- 中国移动B-BOSS系统总体结构
- 人教版三年级下册数学试卷5套
评论
0/150
提交评论