Pytorch阅读文档之reshape,view,flatten, transpose函数

PyTorch reshape操作详解:从数据重塑原理到深度学习实战应用 在深度学习与张量计算中,数据重塑是一项基础且关键的操作,它允许在不改变数据元素的前提下重新组织张量的维度结构。其核心原理基于张量在内存中的线性存储顺序,通过改变索引方式来创建新的数据视图,从而实现高效的内存共享。这一技术对于模型架构中的数据流适配至关重要,能够显著提升计算效率并简化代码逻辑。在工程实践中,数据重塑广泛应用于连接全连接层前的特征展平、序列数据处理中的维度变换以及计算机视觉中的通道空间重组等场景。本文聚焦PyTorch中的reshape操作,深入解析其视图机制、-1参数的自动推导特性,并通过对比 阅读详情

Pytorch阅读文档之reshape,view,flatten函数

flatten函数

之前写过相关的文章,链接再此,对比总结会写在最后,看官别着急吼。

torch.reshape()函数

#reshape(*shape) → Tensor
#参数:
#shape (tuple of python:ints or int...) – 想要转换的形状
#返回具有与self相同的数据和元素数量但具有指定形状的张量。
#如果shape与当前形状兼容,则此方法返回一个视图。
#有关何时可以返回视图,请参见torch.Tensor.view()。view之后再说,先看reshape
torch.reshape(input, shape) → Tensor
#返回具有与input相同的数据和元素数量,但具有指定形状的张量。如果可能,返回的张量将是input视图。否则,它将是copy的版本。连续输入和具有兼容步幅的输入可以在不复制的情况下进行重塑,但是您不应该依赖复制与查看行为。
#某个尺寸可能为-1,在这种情况下,它是根据剩余尺寸和输入的元素数推断出来的。(后面会有栗子)
#参数:input (Tensor) – 原始的shape
#shape (tuple of python:ints) – 需要的shape
>>> a = torch.arange(4.)
>>> torch.reshape(a, (2, 2))
tensor([[ 0.,  1.],
        [ 2.,  3.]])
>>> b = torch.tensor([[0, 1], [2, 3]])
#只有一个-1的话,就是直接展开
>>> torch.reshape(b, (-1,))
tensor([ 0,  1,  2,  3])
#给定一个的时候,另外一个就能就算出来
>>> torch.reshape(b, (-1, 2))
tensor([[0, 1],
        [2, 3]])
>>>  b = torch.tensor([[[0, 1], [2, 3]], [[0, 1], [2, 3]], [[0, 1], [2, 3]]])
>>> torch.reshape(b, (-1, 2, -1))
RuntimeError: only one dimension can be inferred
>>> torch.reshape(b, (2, 2, -1))
tensor([[[0, 1, 2],
         [3, 0, 1]],

        [[2, 3, 0],
         [1, 2, 3]]])

torch.Tensor.view()函数

#view(*shape) → Tensor
#返回一个新张量,其数据与self张量相同,但shape是不同。 返回的张量共享相同的数据,并且必须具有相同数量的元素,但可能具有不同的大小。一个张量可以被view,new view的尺寸必须与其原始尺寸和stride兼容,也就是说每个新视图尺寸必须是原始尺寸的子空间,或者只能跨越原始的d,d+1,...,d+k这些要满足以下的连续性条件,stride[i]=stride[i+1]×size[i+1] 对于任意的i=0,...,k-1
#一个tensor必须是连续的,才能被contiguous()查看。
>>> x = torch.randn(4, 4)
>>> x.size()
torch.Size([4, 4])
>>> y = x.view(16)
>>> y.size()
torch.Size([16])
>>> z = x.view(-1, 8)  # the size -1 的位置是可以推断出来
>>> z.size()
torch.Size([2, 8])

>>> a = torch.randn(1, 2, 3, 4)
>>> a.size()
torch.Size([1, 2, 3, 4])
>>> b = a.transpose(1, 2)  # 交换第二维度和第三维度,改变了内存的位置
>>> b.size()
torch.Size([1, 3, 2, 4])
>>> c = a.view(1, 3, 2, 4)  # 不改变内存中的位置
>>> c.size()
torch.Size([1, 3, 2, 4])
>>> torch.equal(b, c) #所以不是一个
False
>>> torch.equal(a, c) #还是不是一个,不清楚官方给这个栗子想说明什么
False

#顺便说一下contiguous()
#返回一个包含与self张量相同数据的连续张量。如果self张量是连续的,则此函数返回self张量。其实就是返回一个结果
#torch.transpose(input, dim0, dim1) → Tensor
#返回张量,该张量是输入的转置版本。
#给定的尺寸dim0和dim1被交换。
#生成的张量与输入张量共享其基础存储,因此更改其中一个的内容将更改另一个的内容。
>>> x = torch.randn(2, 3)
>>> x
tensor([[ 1.0028, -0.9893,  0.5809],
        [-0.1669,  0.7299,  0.4942]])
#第一维度和第二维度转换
>>> torch.transpose(x, 0, 1)
tensor([[ 1.0028, -0.1669],
        [-0.9893,  0.7299],
        [ 0.5809,  0.4942]])
PyTorch reshape操作详解:从张量形状原理到深度学习实战应用 在深度学习和张量计算中,张量作为多维数组是数据的基本载体,其形状定义了每个维度的元素数量,直接影响神经网络层的计算兼容性。理解张量形状的原理是掌握数据预处理和模型构建的基础,它决定了数据在不同计算模块间的流动方式。从技术价值看,形状操作是连接不同神经网络层的关键桥梁,特别是在全连接层与卷积层之间进行数据格式转换时不可或缺。在实际应用场景中,无论是为全连接层展平图像数据,还是为RNN调整序列维度,亦或是重组特征图进行注意力计算,都需要灵活的形状变换能力。本文聚焦PyTorch中的reshape操作,深入解析其 阅读详情

相关推荐

PyTorch vs TensorFlow:深度学习框架选型与实战指南

深度学习框架是构建神经网络模型的基石,其核心价值在于通过张量运算和自动求导机制,将复杂的梯度计算与GPU并行加速封装成易用的API,大幅降低研发门槛。选型时需理解动态图与静态图的设计差异:动态图利于调试和快速迭代,适合学术研究与原型验证;静态图则更擅长优化和分布式部署,广泛应用于工业落地。本文从张量、自动求导等基础概念出发,系统对比PyTorch与TensorFlow的语法差异和生态优势,并结合CNN手写数字识别(MNIST)项目的完整实现,直观展示两者在模型定义、训练循环及工程部署上的异同,为不同背景的开

weixin_34194359的博客 316

pytorch中view的使用小结

pytorch中的view类似于numpy中的resize和reshape,也就是说它的作用是重新组合tensor数据。

非晚非晚的博客 2912

Transformer原理与PyTorch从零实现:从NLP到视觉与时序

深度学习处理序列数据时,注意力机制通过查询-键-值运算直接建模长距离依赖,突破了循环网络顺序计算的瓶颈。Transformer将自注意力、多头机制、位置编码、残差连接与前馈网络组合为模块化架构,已成为自然语言处理、计算机视觉等领域的通用底座。在工程实践中,理解其内部实现有助于调试模型、优化显存和排查Loss不下降等问题。通过PyTorch从零构建最小可训练的Transformer,并延伸到Vision Transformer、Swin Transformer及时间序列预测等应用,可帮助开发者从API调用走向

anjichan4261的博客 475

Pytorch基础:Tensor的reshape()方法

PyTorch中的reshape()方法用于改变张量形状而不改变数据顺序,与NumPy的reshape类似。该方法支持多种参数形式(元组、列表或单独整数),要求新形状的元素总数与原张量一致。特殊参数-1可实现自动维度推断,但不能在多维度同时使用。reshape()可能返回原张量的视图(共享存储),需注意张量连续性问题。此外,torch.reshape()函数与该方法功能相同。

保持终身学习的能力,温故而知新 1万+

NumPy数组的ndim与shape属性:数据维度的核心理解与实战应用

在数据处理与科学计算领域,多维数组是承载信息的核心容器。理解数据的维度与结构是进行有效计算的前提,这直接关系到算法的正确性与性能。NumPy作为Python生态中数值计算的基石,其ndarray对象的ndim和shape属性正是描述数据维度与规模的关键元信息。ndim定义了数组的维度数量,从0维标量到高维张量;而shape则精确刻画了每个维度上的大小,二者共同决定了数据的内存布局与逻辑结构。掌握这些概念不仅能帮助开发者避免常见的维度错误,如广播失败或矩阵乘法不匹配,更是进行数据重塑、轴操作以及与深度学习框架

weixin_34189116的博客 456

从零实现Transformer:自注意力机制与PyTorch实战详解

在自然语言处理领域,序列建模是核心基础任务,传统RNN因串行计算和长程依赖问题面临瓶颈。Transformer架构通过自注意力机制,实现了序列内任意位置信息的直接交互与并行计算,从根本上解决了这些问题。其技术价值在于为大规模语言模型提供了高效可扩展的底层支持,已成为GPT、BERT等主流模型的基石。在工程实践中,理解多头注意力、位置编码等关键组件的实现原理,对于模型调试与定制化开发至关重要。本文以PyTorch框架为例,通过构建一个简化的英德翻译模型,详细拆解了Transformer的编码器-解码器结构、掩

weixin_34279246的博客 306

torch.Tensor.view(*args)的用法以及-1的使用

torch.Tensor.view(*args) 函数作用: 返回一个有相同数据但形状不同的tensor。 返回的tensor必须有与原tensor相同的数据和相同数目的元素,但形状可以自己定义。 一个tensor必须是连续的contiguous()才能被查看。 关于连续可以参考这里 函数参数及实现: 参数主要是定义输出tensor的形状。 这里要提到-1的使用。 参数可以是这样的形式: x = torch.randn(3, 4) print(x) y = x.view(-1,6) print(y)

m0_46614636的博客 2336

NumPy核心入门:从多维数组到向量化计算,掌握Python科学计算基石

在Python科学计算与数据分析领域,高效处理大规模数值数据是核心需求。其底层原理依赖于对连续内存块的操作和编译语言优化,以此克服Python原生循环的性能瓶颈。这一技术价值在于实现了接近C语言速度的数值运算,为高性能计算提供了基础。其应用场景广泛覆盖数据分析、机器学习、图像处理和科学模拟。本文聚焦于NumPy,作为实现这一目标的关键工具,它通过多维数组(ndarray)和向量化操作,并结合广播机制与通用函数(ufunc),构成了Python数据科学生态系统的基石。掌握这些概念是高效使用Pandas、Sci

weixin_30388677的博客 405

pytorch中的reshape()、view()、nn.flatten()和flatten()

在使用pytorch定义神经网络结构时,经常会看到类似如下的.view() / flatten()用法,这里对其用法做出讲解与演示。

梦在黎明破晓时的博客 1万+

LLM面试与架构实战指南:从Transformer原理到Llama 2源码剖析

Transformer架构作为现代大语言模型(LLM)的核心基础,其自注意力机制与位置编码等原理构成了自然语言处理的基石。理解其工作机制,特别是多头注意力(MHA)及其高效变体如分组查询注意力(GQA),对于优化模型推理效率至关重要。这些技术通过减少KV Cache的显存开销,直接提升了模型在长序列生成场景下的工程实践价值。在具体的开源模型实现中,例如Llama 2,这些原理被应用于解码器层、旋转位置编码(RoPE)和前馈网络(SwiGLU)等关键模块。本指南聚焦于如何将这些通用架构知识,与Llama 2等

weixin_33979203的博客 459

YOLOv11改进 | 主干/Backbone篇 | 大核心卷积UniRepLknet目标检测网络(适配yolov11全系列轻量化)

本文给大家带来的改进机制是特征提取网络,该网络结构的重点在于使用Dilated Reparam Block和大核心指导原则,强调了高效的结构进行通道间通讯和空间聚合,以及使用带扩张的小核心进行重新参数化,该网络结构就是在LKNet基础上的一个升级版本,LKNet我们之前已经出过教程了。在各种视觉任务中,包括图像分类、目标检测和语义分割,都显示出优异的性能。欢迎大家订阅我的专栏一起学习YOLO!YOLOv11改进系列专栏——本专栏持续复习各种顶会内容——科研必备目录一、本文介绍。

Snu77的博客 2790

Pytorch中 permute / transpose 和 view / reshape, flatten函数

Pytorch中 permute、transpose 和 view 、resize函数

ytusdc的博客 5922

ArcGISPro小白必看:5分钟搞定3D地形图制作(附免费数据源)

本文为ArcGISPro初学者提供5步制作专业3D地形图的完整指南,涵盖免费数据获取、项目初始化、数据预处理、3D场景构建和成果输出等关键步骤。特别推荐使用NASA的SRTM高程数据和吉林一号卫星影像,帮助用户快速掌握3D地形图制作技巧,适用于教学演示和科研分析。

weixin_28314575的博客 238

深入解析RoPE旋转位置编码:原理、PyTorch实现与大模型应用

在Transformer架构中,位置编码是让模型理解序列顺序的关键技术。其核心原理是为词向量注入位置信息,以克服自注意力机制的排列不变性。从绝对位置编码到相对位置编码,技术不断演进,旨在更好地建模长程依赖和提升长度外推能力。旋转位置编码(RoPE)作为一种创新方法,巧妙地将绝对位置信息通过复数旋转操作转化为相对位置关系,在理论上实现了统一,在实践中显著提升了模型性能。这一技术已被广泛应用于LLaMA、ChatGLM等大语言模型,成为处理长文本和理解序列依赖的重要基础。本文将从数学原理出发,结合PyTorch

weixin_30652897的博客 402

spyglass之功耗分析

用于功耗分析的软件除了ptpx外,spyglass也可以。ptpx的功耗分析是基于netlist(网表)进行的,一般用于分析综合后的pre功耗和P&R后的post功耗,但这已经是项目进行到比较后期了,如果后期发现功耗数据与我们目标功耗相差较大,则意味着需要功耗优化,这时有可能会将项目计划节点延迟。如果在前期designer可以获得设计模块的功耗数据,可提早优化功耗,spyglass则为designer提供了一个很好的手段去评估功耗,从而提前优化功耗。

u011974971的博客 9191

GenomeSurvyIndex设计--随笔017

摘要: GenomeSurvyIndex是一款自动化多倍体基因组调查工具,整合FastK、Smudgeplot和GenomeScope2.0三大核心组件。该工具通过k-mer频谱特征自动识别基因组倍性类型,包括二倍体(1:2:4)和同源四倍体(1:2:3:4),并采用3a1b>2a2b算法判定同源/异源多倍体。工具提供完整的conda环境配置方案,封装为Python脚本实现全流程自动化分析,包含k-mer计数、倍性判定、基因组特征计算等功能,最终输出标准化报告和可视化图表。该方案可直接部署使用,适用于

weixin_44874487的博客 473

YOLOv11轻量化:ShuffleNet通道混合策略解析与实践

轻量化神经网络通过优化计算效率与硬件适配性,成为计算机视觉领域的关键技术。其核心原理在于重构网络结构,典型如分组卷积通过通道分组降低计算量,但会引发信息隔离问题。ShuffleNet创新性地引入通道混合(Channel Shuffle)机制,通过跨组信息交换保持特征表达能力,在YOLOv11等目标检测框架中实现计算量减少60%的突破。该技术特别适用于实时检测场景,能有效平衡模型精度与推理速度。在工程实践中,需关注分组数选择、内存访问成本(MAC)优化等关键因素,结合GPU并行计算特性进行部署调优。

weixin_33966095的博客 389

南 京 农 业 大 学 试 题 纸 附表(rape.csv)是25个油菜材料,测得每个材料的千粒重、亚油酸等的含量. (1) 对物质含量的八个指标作主成分分析,画出碎石图和主成分得分图; (2) 选

(1)请用n1

Mrrunsen的博客 497

CMuon优化器:动量正交化加速DiT训练的新方案

在深度学习模型训练中,优化器的选择直接影响收敛速度与稳定性。以扩散模型和视觉Transformer为代表的生成模型,常面临迭代慢、loss波动大等问题,AdamW等传统优化器在处理大规模二维权重矩阵时存在结构信息利用不足的局限。动量正交化作为一种矩阵级优化思路,通过保留历史梯度并施加正交约束,使更新方向更平滑,有效缓解梯度消失或爆炸问题。Newton-Schulz迭代能以较低成本逼近SVD极分解,为工程落地提供了高效途径。CMuon在此基础上引入分块机制,对大型参数矩阵分段执行正交化,显著降低计算与内存开销

weixin_34033624的博客 649

【WRF-Urban】使用 LCZ 替换 WRF 运行中的 LUCC 数据

使用 LCZ 替换 WRF 运行中的 LUCC 数据

WW、forever的博客 987

在 ABAP Push Channel 里玩转 Detached Client:用 Attach Handle 把 WebSocket 连接交接给业务逻辑

摘要:本文介绍了ABAP Push Channels (APC)中的Detached Client技术,该技术通过将WebSocket连接建立与后续处理分离,实现更高效的实时通信。核心流程包括创建连接、使用connect_and_detach交接连接、以及通过attach handle重新附着发送消息。文章还探讨了PCP协议和AMC技术在企业级推送场景中的应用,并通过示例代码展示了Detached Client的具体实现方式。这种设计解决了传统轮询的资源浪费问题,特别适用于生产线监控、客服系统等需要服务端主

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2310

深入理解RoPE旋转位置编码:从原理到Transformer实战实现

位置编码是Transformer架构理解序列顺序的核心组件,它解决了模型处理词袋数据时无法感知位置信息的问题。其原理是为序列中的每个位置生成一个独特的编码向量,与词嵌入结合后输入模型,使注意力机制能区分不同位置的词元。这项技术的核心价值在于赋予模型序列感知能力,是机器翻译、文本生成等任务的基础。随着大语言模型的普及,对更长上下文的理解成为关键需求,这推动了位置编码技术的演进。旋转位置编码(RoPE)作为一种先进的相对位置编码方法,通过旋转操作将相对位置信息内蕴于注意力计算中,在理论上具备更好的长度外推性,已

weixin_34082854的博客 337

基于DynamicHead的YOLOv8四头版本改进:面向复杂场景的多目标检测优化【YOLOv8】

YOLOv8的检测头是通过不同尺度的特征层输出检测结果。这些检测头通常包括三个:用于大物体、中等物体和小物体的检测。然而,这种单一结构可能会在复杂场景下失去针对性和灵活性,特别是当多个目标之间差异较大时。为了进一步提升模型在特定目标上的检测性能,DynamicHead的引入为我们提供了一个多检测头的优化方案。本文提出了一种基于DynamicHead的四头版本YOLOv8改进方案,以解决复杂场景下多目标检测的挑战。通过引入四个独立检测头,分别针对不同目标特征进行优化,实现了更灵活的检测结构。

博客 1717

从注意力公式到ViT:Transformer核心机制与视觉应用全解析

在深度学习领域,注意力机制(Attention Mechanism)是一种模仿人类认知聚焦能力的关键技术。其核心原理在于,模型能够动态地为输入序列的不同部分分配不同的权重,从而决定在生成输出时应该“关注”哪些信息。这一机制通过计算查询(Query)、键(Key)和值(Value)之间的相关性来实现,其数学抽象即著名的缩放点积注意力公式。该技术的核心价值在于解决了传统循环神经网络(RNN)在长序列建模中存在的梯度消失和难以并行计算的问题,极大地提升了模型处理序列数据的效率和能力。其应用场景已从最初的自然语言处

weixin_30697239的博客 370

将 SAP BTP ABAP environment 与 SAP S/4HANA Cloud 公有云版集成:从架构理念到落地实战

本文探讨了在SAP云环境中实现ABAP扩展应用与S/4HANA Cloud系统集成的技术方案。通过建立标准化的远程通信通道,开发者可在SAP BTP ABAP环境中开发扩展应用,同时安全访问S/4HANA Cloud的核心业务数据和服务。文章详细介绍了整体架构设计、开发实现步骤(包括定义通信场景、生成服务消费模型和编写调用代码)以及管理员在S/4HANA侧的配置工作(创建通信安排和技术用户)。通过一个业务伙伴自助注册平台的案例,展示了如何在不修改标准系统的情况下实现云扩展,体现了SAP"干净核心&

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 237

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Swin Transformer二维相对位置编码:原理、实现与视觉任务应用

在视觉Transformer架构中,位置编码是赋予模型空间感知能力的关键技术。传统的一维绝对位置编码通过为每个图像块分配固定向量来标识其绝对位置,但在Swin Transformer的滑动窗口注意力机制下,这种编码方式会因窗口滑动导致同一位置在不同窗口中的标识不一致,破坏了模型对局部结构的稳定感知。相对位置编码(RPE)则转而建模像素或图像块之间的相对距离关系,这种关系在图像平移或窗口滑动时保持不变,更符合视觉任务依赖部件间相对布局的本质。其技术价值在于以极低的参数量为模型提供了平移近似等变性的能力,提升了

weixin_34072637的博客 383

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

上一篇: Pytorch阅读文档之flatten函数
下一篇: Pytorch阅读文档之torch.cat ,torch.split() and torch.chunk(),torch.stack()函数
GhostintheCode
博客等级 码龄8年 53粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值