pytorch小记(六):pytorch中的clone和detach操作:克隆/复制数据 vs 共享相同数据但 与计算图断开联系

ops/2025/1/17 19:31:03/

pytorch小记(六):pytorch中的clone和detach操作:克隆/复制数据 vs 共享相同数据但 与计算图断开联系

  • 1. `x.clone()`
    • 示例:
  • 2. `x.detach()`
    • 示例:
    • 使用场景:
  • 3. `torch.tensor(x).float()`
    • 示例:
  • 4. 两者的对比与结合
  • 使用场景
    • `x.clone().detach()`:
    • `torch.tensor(x).float()`:
    • 完整示例:
  • 总结


以下代码片段:

python">self.x = x.clone().detach()  # 或 torch.tensor(x).float()

用于处理和复制张量 x,并根据需要使其与原始计算图断开联系或改变其数据类型。下面是逐部分详细解释。


1. x.clone()

  • 作用:对张量 x 进行深拷贝,生成一个新的张量。
    • 新的张量和原始张量具有相同的数据,但存储在不同的内存空间。
    • 修改 clone() 的返回值不会影响原始张量。

示例:

python">x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
y = x.clone()y[0] = 99.0
print(x)  # tensor([1., 2., 3.], grad_fn=<CloneBackward>)
print(y)  # tensor([99.,  2.,  3.])

2. x.detach()

  • 作用:返回一个与 x 共享相同数据但 与计算图断开联系 的张量。
    • 通常用于阻止梯度计算。
    • 在神经网络中,如果你不希望某些操作影响反向传播时,会用到 detach()

示例:

python">x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
y = x.detach()y[0] = 99.0  # y 的数据更改不会影响 x
print(x)  # tensor([1., 2., 3.], requires_grad=True)
print(y)  # tensor([99.,  2.,  3.])

使用场景:

detach() 在以下场景中非常有用:

  1. 阻止梯度传播:

    python">z = x.clone().detach()
    # z 不会参与反向传播,x 的梯度也不会受 z 的影响
    
  2. 保存模型状态或生成推断结果:

    python">with torch.no_grad():output = model(x)  # 临时禁用梯度计算
    

3. torch.tensor(x).float()

  • 作用:将输入 x 转换为 PyTorch 张量,并将其数据类型强制为 torch.float32(默认浮点类型)。
  • 适用场景:
    • 输入可能是一个 Python 列表或 NumPy 数组时,用于将其转换为 PyTorch 张量。
    • 确保张量数据类型一致(某些模型或操作对数据类型有严格要求)。

示例:

python">x = [[1, 2, 3], [4, 5, 6]]  # Python 列表
y = torch.tensor(x).float()  # 转为 torch.float32 类型的张量
print(y)
# tensor([[1., 2., 3.],
#         [4., 5., 6.]])

4. 两者的对比与结合

  • x.clone().detach()torch.tensor(x).float() 是不同的操作:

    1. x.clone().detach()
      • 复制一个现有张量,且与原始计算图断开。
      • 适用于 PyTorch 张量 x,不适用于列表或其他数据类型。
    2. torch.tensor(x).float()
      • 将输入转换为新的 PyTorch 张量,适用于从非张量对象(如列表、NumPy 数组)构造张量。
      • 转换过程中可以指定数据类型(如 .float())。
  • 结合使用
    如果需要复制一个张量、改变数据类型,并断开计算图,可以将两者结合:

    python">self.x = torch.tensor(x.clone().detach()).float()
    

使用场景

x.clone().detach()

  • x 是一个 PyTorch 张量,且需要:
    • 复制数据。
    • 与原始计算图断开。

torch.tensor(x).float()

  • x 是一个非 PyTorch 张量对象(如列表或 NumPy 数组),且需要:
    • 转换为 PyTorch 张量。
    • 确保数据类型为浮点型。

完整示例:

python">import torch# 输入张量
x = torch.tensor([[2.0, -1.0], [1.0, 1.0]], requires_grad=True)# 使用 clone().detach()
y = x.clone().detach()
y[0, 0] = 99.0
print("x:", x)  # 原始张量不会改变
print("y:", y)  # 新张量修改了# 使用 torch.tensor()
z = torch.tensor([[1, 2], [3, 4]]).float()
print("z:", z)  # 转换为浮点张量

总结

  • clone():深拷贝一个张量。
  • detach():断开张量与计算图的连接。
  • torch.tensor(x).float():将非张量数据转换为浮点型 PyTorch 张量。
  • 它们在不同场景下各有用途,可以单独使用或结合使用。

http://www.ppmy.cn/ops/150898.html

相关文章

MYSQL的第一次作业

目录 前情提要 题目解析 连接并使用数据库 创建employees表 创建orders表 创建invoices表 ​查看建立的表 前情提要 需要下载mysql并进行配置&#xff0c;建议下载8.0.37&#xff0c;详情可见MySQL超详细安装配置教程(亲测有效)_mysql安装教程-CSDN博客 题目解析 …

java进行pdf文件压缩

文章目录 pdf文件压缩 pdf文件压缩 添加依赖 <dependency><groupId>com.luhuiguo</groupId><artifactId>aspose-pdf</artifactId><version>23.1</version> </dependency>public class OptimizePdf {public static void opti…

[Unity] 【图形渲染】Unity Shader光照基础2-标准光照模型

在早期的游戏开发中,游戏引擎大多使用标准光照模型来模拟光线如何与物体表面交互。虽然现代引擎通常会采用更复杂的光照技术,但标准光照模型依然是一个关键概念,特别是在实时渲染中。在本文中,我们将深入探讨Unity标准光照模型的各个组成部分,了解光线如何与物体表面相互作…

【Uniapp-Vue3】响应式单位rpx及搭配使用UI产品工具

我们在编写CSS的时候&#xff0c;如果单位使用px&#xff0c;就会导致大小固定&#xff0c;但是如果我们想要根据不同的设备改变大小就要使用rpx作为单位。 rpx是以宽度为750的设计图得出的数据&#xff0c;以即时设计的设计稿为例&#xff1a; 该设计稿的宽度是375px 选中这…

【cs.LG】25.1.15 arxiv更新速递

【cs.LG】25.1.15 arxiv更新100篇 —第1篇---- Reward Machines for Deep RL in Noisy and Uncertain Environments &#x1f50d; 关键词: Reward Machines, Deep RL, Noisy Environments, Uncertain Environments, POMDP 链接1 摘要: Reward Machines 是一种受自动机启发…

jenkins-视图管理

一. 简述&#xff1b; jenkins默认只有一个All的view&#xff0c; 在我们线上环境中(测试、预发布、线上、端、语言环境等)&#xff0c;显然是不合理的(放在一个view中不编译管理)。我们可以通过一个dashboard view的插件来进行多个view(按环境&#xff0c;业务等分隔均可)管理…

蚁群算法(Ant Colony Optimization, ACO):各领域应用、相关学术分享

目录 1. 旅行商问题&#xff08;TSP&#xff09; 2. 车辆路径规划 3. 任务调度 4. 网络路由 5. 图像处理与计算机视觉 6. 组合优化问题 7. 功能优化与控制系统 8. 机器学习与特征选择 9. 跨层优化 相关学术会议分享 蚁群算法&#xff08;Ant Colony Optimization, A…

第十章:电子表格软件Excel

文章目录&#xff1a; 一&#xff1a;界面 1.介绍 2.选项卡 2.1 开始 2.2 插入 2.3 布局 2.4 公式 2.5 数据 2.6 审阅 2.7 视图 2.8 开发工具 2.9 图表工具 二&#xff1a;基础 1.工作簿 2.工作表 3.单元格 4.宏 三&#xff1a;数据 1.数据类型 2.自动填充…