当前位置: 首页 > backend >正文

reshape/view/permute的原理

在pytorch中,Tensor的存储是行主序的,也就是意味着最后一个维度的元素的存储时连续的,reshape和view并不改变元素存储的内存,仅仅改变访问的间隔,下面举例说明;
比如一个23的Tensor在内存中的存储是连续的:[1,2,3,4,5,6]
实际访问的过程中,1,2,3属于第一行,4,5,6属于第二行,对于第一个维度2,访问的间隔是3,对于第二个维度3,访问的间隔是1;
如果reshape成3
2的Tensor,对于第一个维度3,访问的间隔是2,对于第二个维度2,访问的间隔是1;也就是对于当前维度,访问的间隔是下一个维度的数值

reshape 和 view

reshape 和 view 不会改变原始 Tensor 的内存存储。它们的工作原理如下:

  1. 内存视图
    共享内存:reshape 和 view 返回的是原始 Tensor 的一个新的视图(view),而不是复制数据。这意味着新 Tensor 和原始 Tensor 共享相同的内存空间。
  2. 数据不变
    原始数据保持不变:通过 reshape 或 view 生成的新 Tensor 的数据布局与原始 Tensor 相同。改变新视图中的数据会影响原始 Tensor,反之亦然。
  3. 连续性要求
    注意连续性:如果原始 Tensor 是非连续的,使用 view 可能会导致错误。在这种情况下,使用 reshape 更为安全,因为它会在必要时返回一个新的 Tensor。
    总结
    reshape 和 view 不会改变原始 Tensor 的内存存储,它们只是创建了一个指向同一块内存的新视图。

permute

permute 是 PyTorch 中用于重新排列 Tensor 维度的操作。其工作原理主要涉及以下几个方面:

  1. 维度重排
    重新排列维度:permute 允许用户指定一个新的维度顺序。例如,给定一个形状为 (2, 3, 4) 的 Tensor,使用 tensor.permute(1, 0, 2) 会改变 Tensor 的形状为 (3, 2, 4)。
  2. 内存视图
    共享内存:与 reshape 和 view 类似,permute 返回的是原始 Tensor 的一个新的视图,不会复制数据。新 Tensor 仍然指向原始数据的内存。
  3. 步幅的变化
    步幅计算:permute 通过调整步幅来实现维度重排。步幅决定了在内存中如何跳过元素以访问不同的维度。例如:
    原始 Tensor 的步幅会根据新的维度顺序计算出新的步幅。
  4. 效率
    高效操作:由于不涉及数据的拷贝,permute 操作非常高效,适合在大规模数据集上使用。
http://www.xdnf.cn/news/7465.html

相关文章:

  • 7-2 银行业务队列简单模拟
  • 【PhysUnits】4.5 负数类型(Neg<P>)算术运算(negative.rs)
  • Node.js 实战八:服务部署方案对比与实践
  • 应对WEEE 2025:猎板PCB的区块链追溯与高温基材创新
  • 牛客网 NC274692 题解:素世喝茶
  • 低空经济的法律挑战与合规实践
  • uv 包管理工具使用教程
  • pkg-config 是什么,如何工作的
  • 深入解析`lsof`命令:查看系统中打开文件与进程信息
  • 【Nuxt3】安装 Naive UI 按需自动引入组件
  • ThreadLocal 源码深度解析
  • Linux基础第四天
  • goldenDB创建函数索引报错问题
  • 鸿蒙 Background Tasks Kit(后台任务开发服务)
  • 北京本地 SEO 推广:从技术成本到效果转化的深度拆解
  • 从零训练一个大模型:DeepSeek 的技术路线与实践
  • 苏州SMT贴片加工服务选择指南
  • MCP详解
  • Python中的整型(int)和浮点数(float)
  • 哈希表和哈希函数
  • 养生攻略:打造活力健康日常
  • 《 二级指针:解锁指针的进阶魔法》
  • GPT/Claude3国内免费镜像站更新 亲测可用
  • 活学妙用——5W2H分析法
  • 【java第17集】java流程控制语句详解
  • 按键太频繁导致,报不应该报的错误!
  • 秒删node_modules 极速删除 (rimraf工具)
  • Linux grep 命令详解:常用选项、参数及实战场景
  • 基于SpringBoot的家政预约系统
  • 以下是 MySQL 中常用到的 英语单词和词组 的全面分类整理,涵盖数据库操作、SQL语句、函数、配置等核心内容