【Pytorch神经网络理论篇】 03 Pytorch快速上手(三)张量的数据操作

简介: view()只能作用于整块内存上的张量,若对于非连续内存上的张量则不可以用该函数处理。也无法对transpose()与permute()等改变后的张量再进行变化。

bcb503cecfe948c5a1a62c784777f81d.png


1 张量的数据操作


1.1 torch.reshape()实现数据维度变化


import torch
a = torch.tensor([[1,2],[3,4]])
print(torch.reshape(a,(1,-1))) # 将其转化为只有1行数据的张量,参数-1表示自动计算
# tensor([[1, 2, 3, 4]])
print(a.reshape((1,-1))) # # 将其转化为只有1行数据的张量,参数-1表示自动计算
# tensor([[1, 2, 3, 4]])
print(a.view((1,-1))) # # 将其转化为只有1行数据的张量,参数-1表示自动计算
# tensor([[1, 2, 3, 4]])


1.2 张量数据的矩阵转置


import torch
b = torch.tensor([[5,6,7],[2,8,0]]) # 定义二维张量
print(torch.t(b)) # 转置矩阵
# 输出 tensor([[5, 2],
#         [6, 8],
#         [7, 0]])
print(torch.transpose(b,dim0=1,dim1=0)) # 转置矩阵,将原有数据的第1个维度切换到第0个维度
# 输出 tensor([[5, 2],
#         [6, 8],
#         [7, 0]])
print(b.permute(1,0)) # 转置矩阵,将原有数据的第1个维度切换到第0个维度
# 输出 tensor([[5, 2],
#         [6, 8],
#         [7, 0]])


1.3 view()与contignous()方法


1.3.1 概述


view()只能作用于整块内存上的张量,若对于非连续内存上的张量则不可以用该函数处理。也无法对transpose()与permute()等改变后的张量再进行变化。


view()需要与contiguous()进行连用,进而保证该张量在同一个内存块中。


1.3.2 代码


import torch
b = torch.tensor([[5,6,7],[2,8,0]]) #定义二维张量
print(b.is_contiguous()) #判断内存是否连续
# 输出 True
c = b.transpose(0,1)
print(c.is_contiguous()) #判断内存是否连续
# 输出 False
print(c.contiguous().is_contiguous()) #判断内存是否连续
# 输出 True
print(c.contiguous().view(-1)) #判断内存是否连续
# 输出 tensor([5, 2, 6, 8, 7, 0])


1.4 torch.cat()数据拼接函数


1.4.1 概述


torch.cat()函数会实现将两个张量沿着指定方向进行拼接===》在神经网络中较为常见


1.4.2 代码


import torch
a = torch.tensor([[1,2],[3,4]]) #定义二维张量
b = torch.tensor([[5,6],[7,8]])
print(torch.cat([a,b],dim=0)) #沿着0维度进行连接
# 输出 tensor([[1, 2],
#         [3, 4],
#         [5, 6],
#         [7, 8]])
print(torch.cat([a,b],dim=1)) #沿着1维度进行连接
# 输出 tensor([[1, 2, 5, 6],
#         [3, 4, 7, 8]])


1.5 torch.chunk()实现数据的均匀分割


1.5.1 概述


torch.chunk()将一个多维张量按照指定的维度和拆分数量进行分割,其返回值是元组,不可修改。


1.5.2 代码


import torch
a = torch.tensor([[1,2],[3,4]])
print(torch.chunk(a,chunks=2,dim=0)) #将张量a按照第0维度分成两个部分
# 输出 (tensor([[1, 2]]), tensor([[3, 4]]))
print(torch.chunk(a,chunks=2,dim=1)) #将张量a按照第1维度分成两个部分
# 输出 (tensor([[1],[3]]), tensor([[2],[4]]))


1.6 torch.split()实现数据的不均匀分割


import torch
b = torch.tensor([[5,6,7],[2,8,0]])
#按照第1维度分成2个部分
### split_size_or_sections 将按照指定的元素个数对张量数据进行数据拆分,不满足个数的剩余数据将会作为分割数据的最后一部分
print(torch.split(b,split_size_or_sections=(1,2),dim=1) )
# 输出 (tensor([[5],[2]]), tensor([[6, 7],[8, 0]]))


1.7 torch.gather()对张量数据进行检索


1.7.1 概述


torch.gather()对于张量数据中的值按照指定的索引与顺序进行排列,index参数必须是张量类型,要与输入的维度相同


1.7.2 代码


import torch
b = torch.tensor([[5,6,7],[2,8,0]])
# 沿着第1维度,按照index的形状进行取值排列
print(torch.gather(b,dim=1,index=torch.tensor([[1,0],[1,2]])))
#输出 tensor([[6, 5],[8, 0]])
# 沿着第0维度,按照index的形状进行取值排列
print(torch.gather(b,dim=0,index=torch.tensor([[1,0,0]])))
#输出 tensor([[2, 6, 7]])
print(torch.index_select(b,dim=0,index=torch.tensor(1))) #取出整行或者整列
#输出 tensor([[2, 8, 0]])


1.8 按照指定的阈值对于张量数据进行过滤展示


1.8.1 概述


torch.gt():大于


torch.ge():大于或等于


torch.lt():小于


torch.le():小于或等于


1.8.2 代码


import torch
b = torch.tensor([[1,2],[2,8]])
mask = b.ge(2) #大于或者等于2
print(mask)
# 输出 tensor([[False,  True],
#         [ True,  True]])
print(torch.masked_select(b,mask))
# 输出 tensor([2, 2, 8])


1.9 找出张量中的非零数值的索引


import torch
eye = torch.eye(3) # 生成一个对角矩阵
print(eye)
# 输出 tensor([[1., 0., 0.],
#         [0., 1., 0.],
#         [0., 0., 1.]])
print(torch.nonzero(eye)) # 找出对角矩阵中的非零值索引
# 输出 tensor([[0, 0],
#         [1, 1],
#         [2, 2]])


1.10 根据条件实现对张量的数值取值


import torch
b = torch.tensor([[5,6,7],[2,8,0]])
c = torch.ones_like(b) #生成数值均为1的矩阵
print(c)
# 输出 tensor([[1, 1, 1],
#           [1, 1, 1]])
print(torch.where(b>5,b,c)) #将b中大于5的元素提取出来,值不大于5的部分从c中取得
# 输出 tensor([[1, 6, 7],
#            [1, 8, 1]])


1.11 根据阈值进行数据截断


1.11.1 概述


根据阈值进行数据截断===》用于梯度计算中,为梯度设置一个固定的阈值,避免训练过程中的梯度爆炸。


梯度爆炸:模型每次训练的调整值变得很大,最终导致训练结果难以收敛。


1.11.2 代码


import torch
a = torch.tensor([[1,2],[3,4]])
b = torch.clamp(a,min=2,max=3) #按照最小值2,最大值3进行截断
print(b)
# 输出 tensor([[2, 2],
#              [3, 3]])


1.12 获取数据中的最大值、最小值索引


1.12.1 概述


torch.argmax():返回最大索引


torch.argmin():返回最小索引


1.12.2 代码


import torch
a = torch.tensor([[1,2],[3,4]])
print(torch.argmax(a,dim=0)) # 按照第0维度找出最大索引值
# 输出 tensor([1, 1])
print(torch.argmin(a,dim=1)) # 按照第1维度找出最小索引值
# 输出 tensor([0, 0])
print(torch.max(a,dim=0)) # 按照第0维度找出最大索引值与对应数值
# 输出  torch.return_types.max(values=tensor([3, 4]),indices=tensor([1, 1]))
print(torch.min(a,dim=1)) # 按照第1维度找出最小索引值与对应数值
# 输出 torch.return_types.min(values=tensor([1, 3]),indices=tensor([0, 0]))
目录
相关文章
|
3月前
|
Python
LBA-ECO CD-32 通量塔网络数据汇编,巴西亚马逊:1999-2006,V2
该数据集汇集了1999年至2006年间巴西亚马逊地区九座观测塔的碳和能量通量、气象、辐射等多类数据,涵盖小时至月度时间步长。作为第二版汇编,数据经过协调与质量控制,扩展了第一版内容,并新增生态系统呼吸等相关计算数据,支持综合研究与模型合成。数据以36个制表符分隔文本文件形式提供,配套PDF说明文件,适用于生态与气候研究。引用来源为Restrepo-Coupe等人(2021)。
40 1
|
2月前
|
存储 监控 算法
基于 Python 跳表算法的局域网网络监控软件动态数据索引优化策略研究
局域网网络监控软件需高效处理终端行为数据,跳表作为一种基于概率平衡的动态数据结构,具备高效的插入、删除与查询性能(平均时间复杂度为O(log n)),适用于高频数据写入和随机查询场景。本文深入解析跳表原理,探讨其在局域网监控中的适配性,并提供基于Python的完整实现方案,优化终端会话管理,提升系统响应性能。
72 4
|
3月前
|
开发者
鸿蒙仓颉语言开发教程:网络请求和数据解析
本文介绍了在仓颉开发语言中实现网络请求的方法,以购物应用的分类列表为例,详细讲解了从权限配置、发起请求到数据解析的全过程。通过示例代码,帮助开发者快速掌握如何在网络请求中处理数据并展示到页面上,减少开发中的摸索成本。
鸿蒙仓颉语言开发教程:网络请求和数据解析
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
基于Pytorch 在昇腾上实现GCN图神经网络
本文详细讲解了如何在昇腾平台上使用PyTorch实现图神经网络(GCN)对Cora数据集进行分类训练。内容涵盖GCN背景、模型特点、网络架构剖析及实战分析。GCN通过聚合邻居节点信息实现“卷积”操作,适用于非欧氏结构数据。文章以两层GCN模型为例,结合Cora数据集(2708篇科学出版物,1433个特征,7种类别),展示了从数据加载到模型训练的完整流程。实验在NPU上运行,设置200个epoch,最终测试准确率达0.8040,内存占用约167M。
基于Pytorch 在昇腾上实现GCN图神经网络
|
4月前
|
机器学习/深度学习 算法 PyTorch
Perforated Backpropagation:神经网络优化的创新技术及PyTorch使用指南
深度学习近年来在多个领域取得了显著进展,但其核心组件——人工神经元和反向传播算法自提出以来鲜有根本性突破。穿孔反向传播(Perforated Backpropagation)技术通过引入“树突”机制,模仿生物神经元的计算能力,实现了对传统神经元的增强。该技术利用基于协方差的损失函数训练树突节点,使其能够识别神经元分类中的异常模式,从而提升整体网络性能。实验表明,该方法不仅可提高模型精度(如BERT模型准确率提升3%-17%),还能实现高效模型压缩(参数减少44%而无性能损失)。这一革新为深度学习的基础构建模块带来了新的可能性,尤其适用于边缘设备和大规模模型优化场景。
135 16
Perforated Backpropagation:神经网络优化的创新技术及PyTorch使用指南
|
4月前
|
机器学习/深度学习 自然语言处理 PyTorch
基于Pytorch Gemotric在昇腾上实现GAT图神经网络
本实验基于昇腾平台,使用PyTorch实现图神经网络GAT(Graph Attention Networks)在Pubmed数据集上的分类任务。内容涵盖GAT网络的创新点分析、图注意力机制原理、多头注意力机制详解以及模型代码实战。实验通过两层GAT网络对Pubmed数据集进行训练,验证模型性能,并展示NPU上的内存使用情况。最终,模型在测试集上达到约36.60%的准确率。
|
4月前
|
机器学习/深度学习 算法 PyTorch
基于Pytorch Gemotric在昇腾上实现GraphSage图神经网络
本实验基于PyTorch Geometric,在昇腾平台上实现GraphSAGE图神经网络,使用CiteSeer数据集进行分类训练。内容涵盖GraphSAGE的创新点、算法原理、网络架构及实战分析。GraphSAGE通过采样和聚合节点邻居特征,支持归纳式学习,适用于未见节点的表征生成。实验包括模型搭建、训练与验证,并在NPU上运行,最终测试准确率达0.665。
|
5月前
|
安全 网络安全 定位技术
网络通讯技术:HTTP POST协议用于发送本地压缩数据到服务器的方案。
总的来说,无论你是一名网络开发者,还是普通的IT工作人员,理解并掌握POST方法的运用是非常有价值的。它就像一艘快速,稳定,安全的大船,始终为我们在网络海洋中的冒险提供了可靠的支持。
165 22
|
5月前
|
存储 数据库 Python
利用Python获取网络数据的技巧
抓起你的Python魔杖,我们一起进入了网络之海,捕捉那些悠游在网络中的数据鱼,想一想不同的网络资源,是不是都像数不尽的海洋生物,我们要做的,就是像一个优秀的渔民一样,找到他们,把它们捕获,然后用他们制作出种种美味。 **1. 打开魔法之门:请求包** 要抓鱼,首先需要一个鱼网。在Python的世界里,我们就是通过所谓的“请求包”来发送“抓鱼”的请求。requests是Python中常用的发送HTTP请求的库,用它可以方便地与网络上的资源进行交互。所谓的GET,POST,DELETE,还有PUT,这些听起来像偶像歌曲一样的单词,其实就是我们鱼网的不同方式。 简单用法如下: ``` im
120 14
|
6月前
|
网络协议 物联网
VB6网络通信软件上位机开发,TCP网络通信,读写数据并处理,完整源码下载
本文介绍使用VB6开发网络通信上位机客户端程序,涵盖Winsock控件的引入与使用,包括连接服务端、发送数据(如通过`Winsock1.SendData`方法)及接收数据(利用`Winsock1_DataArrival`事件)。代码实现TCP网络通信,可读写并处理16进制数据,适用于自动化和工业控制领域。提供完整源码下载,适合学习VB6网络程序开发。 下载链接:[完整源码](http://xzios.cn:86/WJGL/DownLoadDetial?Id=20)
223 12

热门文章

最新文章

推荐镜像

更多