【深度学习基础】PyTorch Tensor生成方式及复制方法详解

目录

  • PyTorch Tensor生成方式及复制方法详解
    • 一、Tensor的生成方式
      • (一)从Python列表/元组创建
      • (二)从NumPy数组创建
      • (三)特殊初始化方法
      • (四)从现有Tensor创建
    • (五)高级初始化方法
    • 二、复制方法对比
      • (一) `torch.tensor()` vs `torch.from_numpy()`
      • (二) `.clone()` vs `.copy_()` vs `copy.deepcopy()`
      • (三) 深度拷贝(Deep Copy)
    • 三、核心区别总结
    • 四、最佳实践建议

PyTorch Tensor生成方式及复制方法详解

在PyTorch中,Tensor的创建和复制是深度学习开发的基础操作。本文将全面总结Tensor的各种生成方式,并深入分析不同复制方法的区别。


一、Tensor的生成方式

(一)从Python列表/元组创建

import torch# 直接创建Tensor
t1 = torch.tensor([1, 2, 3])          # 整型Tensor
t2 = torch.tensor([[1.0, 2], [3, 4]])  # 浮点型Tensor

(二)从NumPy数组创建

import numpy as nparr = np.array([1, 2, 3])
t = torch.from_numpy(arr)  # 共享内存

(三)特殊初始化方法

zeros = torch.zeros(2, 3)      # 全0矩阵
ones = torch.ones(2, 3)       # 全1矩阵
rand = torch.rand(2, 3)        # [0,1)均匀分布
randn = torch.randn(2, 3)      # 标准正态分布
arange = torch.arange(0, 10, 2) # 0-10步长为2

(四)从现有Tensor创建

x = torch.tensor([1, 2, 3])
x1 = x.new_tensor([4, 5, 6])  # 新Tensor(复制数据)
x2 = torch.zeros_like(x)       # 形状相同,全0
x3 = torch.randn_like(x)       # 形状相同,随机值

(五)高级初始化方法

eye = torch.eye(3)             # 3x3单位矩阵
lin = torch.linspace(0, 1, 5)  # 0-1等分5份
log = torch.logspace(0, 2, 3)  # 10^0到10^2等分3份

二、复制方法对比

(一) torch.tensor() vs torch.from_numpy()

方法数据源内存共享梯度传递数据类型
torch.tensor()Python数据不共享支持自动推断
torch.from_numpy()NumPy数组共享不支持保持一致
# 示例:内存共享验证
arr = np.array([1, 2, 3])
t = torch.from_numpy(arr)
arr[0] = 99  # 修改NumPy数组
print(t)      # tensor([99, 2, 3]),同步变化

(二) .clone() vs .copy_() vs copy.deepcopy()

方法内存共享梯度传递计算图保留使用场景
.clone()不共享保留梯度保留计算图需要梯度回传
.copy_()目标共享不保留破坏计算图高效覆盖数据
copy.deepcopy()不共享不保留不保留完全独立拷贝
# 示例:梯度传递对比
x = torch.tensor([1.], requires_grad=True)
y = x.clone()
z = torch.tensor([2.], requires_grad=True)
z.copy_(x)  # 覆盖z的值y.backward()  # 正常回传梯度到x
# z.backward() # 报错!copy_()破坏计算图

(三) 深度拷贝(Deep Copy)

import copyorig = torch.tensor([1, 2, 3])
deep_copied = copy.deepcopy(orig)  # 完全独立拷贝

三、核心区别总结

  1. 内存共享

    • from_numpy() 与NumPy共享内存
    • 视图操作(如view()/切片)共享内存
    • 其他方法均创建独立副本
  2. 梯度处理

    • .clone() 唯一保留梯度计算图
    • copy_() 会破坏目标Tensor的计算图
    • torch.tensor() 创建新计算图
  3. 使用场景

    • 需要梯度回传:使用.clone()
    • 高效数据覆盖:使用.copy_()
    • 完全独立拷贝:使用copy.deepcopy()
    • 与NumPy交互:使用from_numpy()/numpy()

四、最佳实践建议

  1. 优先使用torch.tensor()创建新Tensor
  2. 需要从NumPy导入数据且避免复制时用from_numpy()
  3. 在计算图中复制数据时必须使用.clone()
  4. 需要覆盖现有Tensor数据时使用.copy_()
  5. 调试时注意内存共享可能导致的意外修改
# 正确梯度传递示例
x = torch.tensor([1.], requires_grad=True)
y = x.clone() ** 2  # 保留计算图
y.backward()        # 梯度可回传到x

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/96123.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/96123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动态规划:入门思考篇

1. 简单类比 假如我们要求全国人数,那么我们只要知道各个省的人数,然后将各个省的人数相加即可,要想知道各个省的人数,只要将这个省下面所有的市人数相加即可,同样,如果想要知道各个市的人数,只…

小杨的 X 字矩阵(举一反三)-洛谷B3865 [GESP202309 二级]

题目描述 小杨想要构造一个 X 字矩阵( 为奇数),这个矩阵的两条对角线都是半角加号 ,其余都是半角减号 - 。例如,一个 55 的 X 字矩阵如下: --- --- ---- --- --- 请你帮小杨根据给定的 打印出对应的“X …

数据组合与合并:Pandas 数据整合全指南 +缺失值处理

数据组合与合并:Pandas 数据整合全指南在进行数据分析之前,数据清洗与整合是关键步骤。 遵循“整洁数据”(Tidy Data)原则: 每个观测值占一行每个变量占一列每种观测单元构成一张独立的表格 整理好数据后,常…

c#联合halcon的基础教程(案例:亮度计算、角度计算和缺陷检测)(含halcon代码)

目录 1.环境配置 2.案例一:亮度计算 halcon代码: 主界面代码: 3.案例二: 角度计算 halcon代码: 主界面代码: 4.案例三:缺陷检测 halcon代码: 主界面代码: 通过…

大数据云原生是什么

"云原生"(Cloud Native)指的是‌利用云计算原生优势(弹性、按需服务、自动化、分布式等)来设计、构建、部署和运行大数据应用和工作负载的方法论与技术体系‌。它不是简单地“把大数据平台搬到云上”,而是从…

Pytest项目_day16(yaml和parametrize结合)

查询手机号归属地 我们首先可以在YAML文件中定义测试数据 方式一,使用- 注意:当我们需要一次传入两个参数时,需要定义两层迭代,即两层列表不够直观,容易写错 输出的结果为: 然后我们可以将测试数据传入test…

【Nginx指南】从核心原理到生产实践

目录Nginx指南:从核心原理到生产实践引言:Nginx在现代架构中的核心地位一、Nginx核心能力与应用场景1.1 多场景适配的全能型中间件1.2 技术优势:Nginx成为行业标准的关键二、Nginx安装部署:源码编译与包管理方案2.1 源码编译&…

物体检测

目录 1 目标定位 2 地标检测 3 目标检测 4 在卷积网络上实现滑动窗口 5 边界框预测 6 交并比 7 非极大值抑制 8 锚框 9 YOLO算法 10 用u-net进行语义分割 11 转置卷积 12 u-net 结构灵感 1 目标定位 你已经对图片分类有所了解。例如通过这张图片可以识…

es7.x es的高亮与solr高亮查询的对比对比说明

一 solr&es高亮1.1 solr与es高亮功能解释说明:1)高亮配置:fragmentSize(1000) 设置片段长度numOfFragments(1) 指定返回的片段数量preTags() 和 postTags() 设置高亮标记2)字段处理差异:在 ES 中,使用 matchQuery 而非 termQ…

DSP音频算法工程师技能2

一、核心知识准备1. 算法原理3A算法(AGC自动增益控制/AEC回声消除/ANS降噪):掌握AEC的NLMS/双讲检测原理,ANS的谱减法/维纳滤波,AGC的压缩曲线设计。熟悉Speex/WebRTC等开源实现。EQ音效:IIR/FIR滤波器设计…

第4章-04-用WebDriver页面元素操作

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:Web爬虫入门与实战精讲,后续完整更新内容如下。 文章…

【计算机视觉与深度学习实战】04基于K-Means聚类的图像分割系统设计与实现

摘要 图像分割作为计算机视觉领域的基础任务,在目标检测、医学影像分析、自动驾驶等众多应用中发挥着关键作用。本文基于K-Means聚类算法设计并实现了一个完整的图像分割系统,该系统集成了多种颜色空间转换、自定义初始化策略、空间特征融合等先进技术。通过Python和Tkinter…

Android Studio常用知识总结

一、运行方式1.运行 (Run)当您选择“运行”时,Android Studio 会编译您的应用并将其安装到目标设备或模拟器上。这通常用于:快速部署: 您只想看看应用是否能正常启动并运行,或者进行一些基础的用户界面测试。性能测试: 在正常运行模式下测试应…

设计模式笔记_行为型_访问者模式

1. 访问者模式介绍访问者模式(Visitor Pattern)是一种行为型设计模式,它允许你在不改变对象结构的前提下,定义作用于这些对象的新操作。访问者模式将操作的逻辑从对象结构中分离出来,使得你可以在运行时动态地添加新的…

数学建模 14 中心对数比变换

用途:是处理成分数据的核心预处理方法,核心目标是解决成分数据的和为常数100% , 导致的维度冗余,非线性相关问题。使得数据满足传统的统计/建模方法;举例子:食品比例中 面粉(50%),糖(30%),水(20%)原理&…

【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day7

🔥个人主页:草莓熊Lotso 🎬作者简介:C研发方向学习者 📖个人专栏: 《C语言》 《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》 ⭐️人生格言:生活是默默的坚持,毅力是永久的…

污水处理行业的 “智能革命”:边缘计算网关如何重塑传统运维模式?

污水处理行业的 “智能革命”:边缘计算网关如何重塑传统运维模式?在污水处理这一关乎生态环境与可持续发展的关键领域,蓝蜂网关正凭借其先进技术与强大功能,发挥着无可替代的重要作用。作为工业级物联网解决方案的核心组件&#x…

ASP.NET Core 中的多租户 SaaS 应用程序

介绍随着软件即服务 (SaaS) 持续主导技术领域,构建能够高效地从单一代码库服务于多位客户(租户)的应用程序变得至关重要。ASP.NET Core 凭借其模块化和可扩展的架构,是实现多租户 SaaS 应用程序的强大框架。本文将指导您了解构建多…

JUC之CompletableFuture【中】

文章目录四、CompletableFuture基本使用4.1 默认线程池、无返回值4.2 默认线程池、有返回值4.3 自定义线程池、有返回值4.4 CompletableFuture 获取结果五、对结果进行处理5.1 方法说明5.2 示例5.3 thenApply vs thenApplyAsync5.3.1 核心区别: 执行线程不同5.3.2 thenApply: 同…

环境变量不生效?

目录 添加环境变量 解决不生效 不生效场景 解决办法 大家都知道Windows系统对于开发者来说并不友好,尤其是新手,当然这是相比于linux和MacOS相比,因为开发工具、项目脚本等环境配置要为复杂,注意事项也更多一些。而这篇文章将…