PyTorch深度学习基础之Tensor的变换、拼接、拆分讲解及实战(附源码 超详细必看)

简介: PyTorch深度学习基础之Tensor的变换、拼接、拆分讲解及实战(附源码 超详细必看)

觉得有帮助请点赞关注收藏~~~

PyTorch提供了大量的对Tensor进行操作的函数或者方法,这些函数内部使用指针实现对矩阵的形状变换拼接拆分等操作,使得人们无须关心Tensor在内存中的物理结构或者管理指针就可以方便且快速的执行这些操作,下面nelement,ndimension,size等方法 可以查看矩阵元素的个数,轴的个数以及维度等

测试代码如下

import  torch
import numpy as np
a=torch.rand(1,2,3,4,5)
print("元素个数",a.nelement())
print("轴的个数",a.ndimension())
print("矩阵维度",a.shape)

在PyTorch中,reshape和view都能用来被更改Tensor的维度,它们区别在于view要求Tensor的物理内存必须是连续的,否则将报错,reshape则没有这种要求,但是view返回的一定是一个索引,reshape返回的是引用还是复制是不确定的

代码如下

import  torch
import numpy as np
a=torch.rand(1,2,3,4,5)
print("元素个数",a.nelement())
print("轴的个数",a.ndimension())
print("矩阵维度",a.shape)
###########
b=a.view(2*3,4*5)
print(b.shape)
c=a.reshape(-1)
print(c.shape)
d=a.reshape(2*3,-1)
print(d.shape)

squeeze和unsqueeze用来给Tensor去掉和添加轴,分别去掉维度为1 的轴和添加维度为1的轴

b=torch.squeeze(a)
print(b.shape)

t和transpose用于转置二维矩阵,这两个函数只接受二维Tensor,t是transpose的简化版

对于高纬度Tensor,可以使用permute方法来变换维度

a=torch.tensor([[2]])
b=torch.tensor([[2,3]])
print(torch.transpose(a,1,0,))
print(torch.t(a))
print(torch.transpose(b,1,0,))
print(torch.t(b))
############
a=torch.rand((1,224,224,3))
print(a.shape)
b=a.permute(0,3,1,2)
print(b.shape)

PyTorch提供了cat和stack方法用于拼接矩阵,cat在已有的轴dim上拼接矩阵,给定轴的维度可以不同,而其他轴的维度必须相同,stack在新的轴上面拼接,它要求被拼接的矩阵所有维度都相同

a=torch.randn(2,3)
b=torch.randn(3,3)
c=torch.cat((a,b))
d=torch.cat((b,b,b),dim=1)
print(c.shape)
print(d.shape)
c=torch.stack((b,b),dim=1)
d=torch.stack((b,b),dim=0)
print(c.shape)
print(d.shape)

除了拼接之外,还有split和chunk用于拆分矩阵,它们不同之处在于split传入的是拆分后每个矩阵的大小,可以传入list也可以传入整数,而chunk传入的是拆分的矩阵个数

 

a=torch.randn(10,3)
for x in torch.split(a,[1,2,3,4],dim=0):
    print(x.shape)
for x in torch.split(a,4,dim=0):
    print(x.shape)
for x in torch.chunk(a,4,dim=0):
    print(x.shape)

最后  全部测试代码如下

import  torch
import numpy as np
a=torch.rand(1,2,3,4,5)
print("元素个数",a.nelement())
print("轴的个数",a.ndimension())
print("矩阵维度",a.shape)
###########
b=a.view(2*3,4*5)
print(b.shape)
c=a.reshape(-1)
print(c.shape)
d=a.reshape(2*3,-1)
print(d.shape)
#############
b=torch.squeeze(a)
print(b.shape)
#############
a=torch.tensor([[2]])
b=torch.tensor([[2,3]])
print(torch.transpose(a,1,0,))
print(torch.t(a))
print(torch.transpose(b,1,0,))
print(torch.t(b))
############
a=torch.rand((1,224,224,3))
print(a.shape)
b=a.permute(0,3,1,2)
print(b.shape)
################
a=torch.randn(2,3)
b=torch.randn(3,3)
c=torch.cat((a,b))
d=torch.cat((b,b,b),dim=1)
print(c.shape)
print(d.shape)
c=torch.stack((b,b),dim=1)
d=torch.stack((b,b),dim=0)
print(c.shape)
print(d.shape)
############
a=torch.randn(10,3)
for x in torch.split(a,[1,2,3,4],dim=0):
    print(x.shape)
for x in torch.split(a,4,dim=0):
    print(x.shape)
for x in torch.chunk(a,4,dim=0):
    print(x.shape)
相关文章
|
7天前
|
机器学习/深度学习 数据采集 人工智能
PyTorch学习实战:AI从数学基础到模型优化全流程精解
本文系统讲解人工智能、机器学习与深度学习的层级关系,涵盖PyTorch环境配置、张量操作、数据预处理、神经网络基础及模型训练全流程,结合数学原理与代码实践,深入浅出地介绍激活函数、反向传播等核心概念,助力快速入门深度学习。
38 1
|
3月前
|
机器学习/深度学习 监控 算法
基于mediapipe深度学习的手势数字识别系统python源码
本内容涵盖手势识别算法的相关资料,包括:1. 算法运行效果预览(无水印完整程序);2. 软件版本与配置环境说明,提供Python运行环境安装步骤;3. 部分核心代码,完整版含中文注释及操作视频;4. 算法理论概述,详解Mediapipe框架在手势识别中的应用。Mediapipe采用模块化设计,包含Calculator Graph、Packet和Subgraph等核心组件,支持实时处理任务,广泛应用于虚拟现实、智能监控等领域。
|
1月前
|
PyTorch 算法框架/工具 异构计算
PyTorch 2.0性能优化实战:4种常见代码错误严重拖慢模型
我们将深入探讨图中断(graph breaks)和多图问题对性能的负面影响,并分析PyTorch模型开发中应当避免的常见错误模式。
112 9
|
2月前
|
机器学习/深度学习 存储 监控
基于深度学习YOLO框架的城市道路损伤检测与评估项目系统【附完整源码+数据集】
本项目基于深度学习的YOLO框架,成功实现了城市道路损伤的自动检测与评估。通过YOLOv8模型,我们能够高效地识别和分类路面裂缝、井盖移位、坑洼路面等常见的道路损伤类型。系统的核心优势在于其高效性和实时性,能够实时监控城市道路,自动标注损伤类型,并生成损伤评估报告。
151 0
基于深度学习YOLO框架的城市道路损伤检测与评估项目系统【附完整源码+数据集】
|
2月前
|
机器学习/深度学习 自动驾驶 算法
基于深度学习的YOLO框架的7种交通场景识别项目系统【附完整源码+数据集】
在智慧交通和智能驾驶日益普及的今天,准确识别复杂交通场景中的关键元素已成为自动驾驶系统的核心能力之一。传统的图像处理技术难以适应高动态、复杂天气、多目标密集的交通环境,而基于深度学习的目标检测算法,尤其是YOLO(You Only Look Once)系列,因其检测速度快、精度高、可部署性强等特点,在交通场景识别中占据了重要地位。
320 0
基于深度学习的YOLO框架的7种交通场景识别项目系统【附完整源码+数据集】
|
3月前
|
机器学习/深度学习 存储 PyTorch
PyTorch + MLFlow 实战:从零构建可追踪的深度学习模型训练系统
本文通过使用 Kaggle 数据集训练情感分析模型的实例,详细演示了如何将 PyTorch 与 MLFlow 进行深度集成,实现完整的实验跟踪、模型记录和结果可复现性管理。文章将系统性地介绍训练代码的核心组件,展示指标和工件的记录方法,并提供 MLFlow UI 的详细界面截图。
130 2
PyTorch + MLFlow 实战:从零构建可追踪的深度学习模型训练系统
|
6月前
|
机器学习/深度学习 自然语言处理 算法
PyTorch PINN实战:用深度学习求解微分方程
物理信息神经网络(PINN)是一种将深度学习与物理定律结合的创新方法,特别适用于微分方程求解。传统神经网络依赖大规模标记数据,而PINN通过将微分方程约束嵌入损失函数,显著提高数据效率。它能在流体动力学、量子力学等领域实现高效建模,弥补了传统数值方法在高维复杂问题上的不足。尽管计算成本较高且对超参数敏感,PINN仍展现出强大的泛化能力和鲁棒性,为科学计算提供了新路径。文章详细介绍了PINN的工作原理、技术优势及局限性,并通过Python代码演示了其在微分方程求解中的应用,验证了其与解析解的高度一致性。
931 5
PyTorch PINN实战:用深度学习求解微分方程
|
10月前
|
机器学习/深度学习 人工智能 TensorFlow
基于TensorFlow的深度学习模型训练与优化实战
基于TensorFlow的深度学习模型训练与优化实战
457 3
|
11月前
|
机器学习/深度学习 PyTorch 算法框架/工具
揭秘深度学习中的微调难题:如何运用弹性权重巩固(EWC)策略巧妙应对灾难性遗忘,附带实战代码详解助你轻松掌握技巧
【10月更文挑战第1天】深度学习中,模型微调虽能提升性能,但常导致“灾难性遗忘”,即模型在新任务上训练后遗忘旧知识。本文介绍弹性权重巩固(EWC)方法,通过在损失函数中加入正则项来惩罚对重要参数的更改,从而缓解此问题。提供了一个基于PyTorch的实现示例,展示如何在训练过程中引入EWC损失,适用于终身学习和在线学习等场景。
928 4
揭秘深度学习中的微调难题:如何运用弹性权重巩固(EWC)策略巧妙应对灾难性遗忘,附带实战代码详解助你轻松掌握技巧
|
11月前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
408 2

热门文章

最新文章

推荐镜像

更多