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)
相关文章
|
3月前
|
机器学习/深度学习 人工智能 PyTorch
PyTorch深度学习 ? 带你从入门到精通!!!
🌟 蒋星熠Jaxonic,深度学习探索者。三年深耕PyTorch,从基础到部署,分享模型构建、GPU加速、TorchScript优化及PyTorch 2.0新特性,助力AI开发者高效进阶。
PyTorch深度学习 ? 带你从入门到精通!!!
|
3月前
|
机器学习/深度学习 PyTorch TensorFlow
TensorFlow与PyTorch深度对比分析:从基础原理到实战选择的完整指南
蒋星熠Jaxonic,深度学习探索者。本文深度对比TensorFlow与PyTorch架构、性能、生态及应用场景,剖析技术选型关键,助力开发者在二进制星河中驾驭AI未来。
759 13
|
4月前
|
机器学习/深度学习 存储 PyTorch
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
Neural ODE将神经网络与微分方程结合,用连续思维建模数据演化,突破传统离散层的限制,实现自适应深度与高效连续学习。
349 3
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
|
5月前
|
PyTorch 算法框架/工具 异构计算
PyTorch 2.0性能优化实战:4种常见代码错误严重拖慢模型
我们将深入探讨图中断(graph breaks)和多图问题对性能的负面影响,并分析PyTorch模型开发中应当避免的常见错误模式。
373 9
|
7月前
|
机器学习/深度学习 存储 PyTorch
PyTorch + MLFlow 实战:从零构建可追踪的深度学习模型训练系统
本文通过使用 Kaggle 数据集训练情感分析模型的实例,详细演示了如何将 PyTorch 与 MLFlow 进行深度集成,实现完整的实验跟踪、模型记录和结果可复现性管理。文章将系统性地介绍训练代码的核心组件,展示指标和工件的记录方法,并提供 MLFlow UI 的详细界面截图。
342 2
PyTorch + MLFlow 实战:从零构建可追踪的深度学习模型训练系统
|
10月前
|
机器学习/深度学习 JavaScript PyTorch
9个主流GAN损失函数的数学原理和Pytorch代码实现:从经典模型到现代变体
生成对抗网络(GAN)的训练效果高度依赖于损失函数的选择。本文介绍了经典GAN损失函数理论,并用PyTorch实现多种变体,包括原始GAN、LS-GAN、WGAN及WGAN-GP等。通过分析其原理与优劣,如LS-GAN提升训练稳定性、WGAN-GP改善图像质量,展示了不同场景下损失函数的设计思路。代码实现覆盖生成器与判别器的核心逻辑,为实际应用提供了重要参考。未来可探索组合优化与自适应设计以提升性能。
948 7
9个主流GAN损失函数的数学原理和Pytorch代码实现:从经典模型到现代变体
|
3月前
|
边缘计算 人工智能 PyTorch
130_知识蒸馏技术:温度参数与损失函数设计 - 教师-学生模型的优化策略与PyTorch实现
随着大型语言模型(LLM)的规模不断增长,部署这些模型面临着巨大的计算和资源挑战。以DeepSeek-R1为例,其671B参数的规模即使经过INT4量化后,仍需要至少6张高端GPU才能运行,这对于大多数中小型企业和研究机构来说成本过高。知识蒸馏作为一种有效的模型压缩技术,通过将大型教师模型的知识迁移到小型学生模型中,在显著降低模型复杂度的同时保留核心性能,成为解决这一问题的关键技术之一。
|
7月前
|
机器学习/深度学习 PyTorch 算法框架/工具
提升模型泛化能力:PyTorch的L1、L2、ElasticNet正则化技术深度解析与代码实现
本文将深入探讨L1、L2和ElasticNet正则化技术,重点关注其在PyTorch框架中的具体实现。关于这些技术的理论基础,建议读者参考相关理论文献以获得更深入的理解。
247 4
提升模型泛化能力:PyTorch的L1、L2、ElasticNet正则化技术深度解析与代码实现

热门文章

最新文章

推荐镜像

更多