【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]))
目录
相关文章
|
5天前
|
机器学习/深度学习 传感器 自然语言处理
深度学习的魔法:如何用神经网络解锁数据的秘密
在这个数字信息爆炸的时代,深度学习技术如同一把钥匙,揭开了数据隐藏的层层秘密。本文将深入浅出地探讨深度学习的核心概念、关键技术和实际应用,带领读者领略这一领域的奥秘与魅力。通过生动的比喻和直观的解释,我们将一起走进神经网络的世界,看看这些由数据驱动的“大脑”是如何学习和成长的。无论你是科技爱好者还是行业新手,这篇文章都将为你打开一扇通往未来的大门。
|
2天前
|
机器学习/深度学习 人工智能 PyTorch
【深度学习】使用PyTorch构建神经网络:深度学习实战指南
PyTorch是一个开源的Python机器学习库,特别专注于深度学习领域。它由Facebook的AI研究团队开发并维护,因其灵活的架构、动态计算图以及在科研和工业界的广泛支持而受到青睐。PyTorch提供了强大的GPU加速能力,使得在处理大规模数据集和复杂模型时效率极高。
112 59
|
7天前
|
机器学习/深度学习 人工智能 PyTorch
掌握 PyTorch 张量乘法:八个关键函数与应用场景对比解析
PyTorch提供了几种张量乘法的方法,每种方法都是不同的,并且有不同的应用。我们来详细介绍每个方法,并且详细解释这些函数有什么区别:
17 4
掌握 PyTorch 张量乘法:八个关键函数与应用场景对比解析
|
12天前
|
数据采集 自然语言处理 监控
【优秀python毕设案例】基于python django的新媒体网络舆情数据爬取与分析
本文介绍了一个基于Python Django框架开发的新媒体网络舆情数据爬取与分析系统,该系统利用Scrapy框架抓取微博热搜数据,通过SnowNLP进行情感分析,jieba库进行中文分词处理,并以图表和词云图等形式进行数据可视化展示,以实现对微博热点话题的舆情监控和分析。
【优秀python毕设案例】基于python django的新媒体网络舆情数据爬取与分析
|
3天前
|
机器学习/深度学习 编解码 人工智能
【生成式对抗网络】GANs在数据生成、艺术创作,以及在增强现实和虚拟现实中的应用
生成对抗网络(Generative Adversarial Networks, GANs)在数据生成领域具有显著的应用价值。GANs通过生成器(Generator)和判别器(Discriminator)两个相互竞争的神经网络,不断迭代优化,从而生成高质量的数据样本。这一技术在数据增强方面尤为重要,特别是在数据稀缺或难以获取的领域,如医疗影像分析、自动驾驶等。GANs能够生成与真实数据相似的新数据样本,从而扩充数据集规模,提高模型的泛化能力。此外,GANs还可以用于生成仿真数据,如金融领域中的股票价格走势,用于训练预测模型,提高预测准确性
11 2
|
10天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:保护数据,共筑防线
【7月更文挑战第41天】在数字化时代,数据成为了新石油。然而,随着网络攻击的日益猖獗,保护这些数据变得至关重要。本文将探讨网络安全漏洞的概念、加密技术的重要性以及提升个人和企业安全意识的必要性。我们将深入了解如何通过技术和教育手段来构建一个更加安全的网络环境。
|
10天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:保护数据的关键策略
在数字化时代,网络安全和信息安全的重要性不言而喻。本文将深入探讨网络安全漏洞、加密技术以及提升安全意识等方面,旨在为读者提供一系列实用的知识分享。我们将从网络安全的基本概念出发,分析常见的网络威胁和漏洞,进而介绍加密技术的原理和应用,最后强调培养良好的安全习惯和意识的重要性。通过这些内容的阐述,希望能够帮助读者更好地理解和应对网络安全挑战。
|
11天前
|
存储 安全 网络安全
云计算与网络安全:保护云端数据的新策略
随着企业和个人用户越来越多地依赖云服务,如何确保存储在远程服务器上的数据安全成为了一个迫切需要解决的问题。本文将介绍云计算的基本概念、云服务的类型以及它们面临的安全挑战。我们将探讨网络安全的重要性,并分析当前信息安全领域面临的主要威胁。最后,文章将提出一系列创新性的防护措施,以增强云计算环境中的数据安全性。
|
1天前
|
SQL 安全 网络安全
网络安全与信息安全:保护数据的关键策略
【8月更文挑战第19天】 在数字化时代,网络安全和信息安全的重要性日益突出。随着技术的发展,网络攻击手段也在不断进化。本文将探讨网络安全漏洞的成因、加密技术的应用以及提升安全意识的必要性。我们将分析如何通过教育和技术措施来增强个人和组织的数据保护能力,以应对日益复杂的网络安全威胁。
|
12天前
|
SQL 安全 测试技术
网络安全与信息安全:保护数据的艺术
【8月更文挑战第8天】在数字化时代,网络安全和信息安全成为了保护个人和企业资产的基石。本文深入探讨了网络安全漏洞、加密技术以及提升安全意识的重要性,旨在为读者提供一套综合性知识体系,帮助他们更好地理解和应对网络威胁。通过分析最新的安全趋势和技术,本文揭示了防御策略的演变过程,并强调了持续教育的必要性,以培养能够识别和防范潜在风险的安全文化。