pytorch小记(九):pytorch中创建指定形状的张量: torch.empty

devtools/2025/3/19 9:39:05/

pytorch小记(九):pytorch中创建指定形状的张量: torch.empty

    • 详细解释
      • 1. 基本功能
      • 2. 语法
      • 3. 示例代码
        • 示例 1:创建一个 5 的未初始化张量
        • 示例 2:创建一个 2×3 的未初始化张量
        • 示例 3:指定数据类型和设备
      • 4. 注意事项


torch.empty 是 PyTorch 中的一个函数,用于创建一个指定形状的张量,但不会对张量中的数据进行初始化。这意味着生成的张量包含内存中随机的“垃圾数据”,它们的值是不确定的。


详细解释

1. 基本功能

  • 未初始化内存
    torch.empty 分配内存空间给张量,但不会对空间中的每个元素进行赋值初始化。结果是张量中的数据可能是内存中之前残留的随机值,因此其值是不可预测的。

  • 用途
    当你需要一个张量来存放后续计算的结果时,可以使用 torch.empty 以节省初始化的时间开销。如果你马上会用新的数据覆盖这些值,使用 torch.empty 是一种高效的方法。

2. 语法

python">torch.empty(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
  • size:张量的形状,可以是一个整数序列。例如 (3, 4) 表示创建一个 3 行 4 列的张量。
  • dtype:数据类型,例如 torch.float32torch.int64 等。默认取决于 PyTorch 的全局设置。
  • device:设备,可以是 "cpu""cuda" 等,用于指定张量存放的位置。
  • requires_grad:是否对张量计算梯度,默认为 False

3. 示例代码

示例 1:创建一个 5 的未初始化张量
python">import torchx = torch.empty(5)
print(x)

输出可能类似于(每次运行结果可能不同):

tensor([3.1183e-25, 1.2416e-42, 0.0000e+00, 0.0000e+00, 0.0000e+00])
示例 2:创建一个 2×3 的未初始化张量
python">import torchx = torch.empty(2, 3)
print(x)

输出可能类似于(每次运行结果可能不同):

tensor([[4.6000e-41, 0.0000e+00, 2.8026e-45],[0.0000e+00, 4.6000e-41, 0.0000e+00]])

这里输出的数字是内存中的随机值。

示例 3:指定数据类型和设备
python">x = torch.empty((2, 3), dtype=torch.float32, device='cpu', requires_grad=True)
print(x)

这将创建一个 2×3 的张量,数据类型为 float32,在 CPU 上,并且设置了 requires_grad=True 用于后续自动求导。

4. 注意事项

  • 不要依赖初始值
    因为 torch.empty 返回的张量中数据是未初始化的,所以在使用前必须显式赋值或覆盖这些数据,否则可能导致错误的计算结果。

  • 与 torch.zeros/torch.ones 的区别
    如果你需要一个所有元素初始化为 0 的张量,可以使用 torch.zeros;如果需要初始化为 1,则使用 torch.ones
    torch.empty 则更快,因为它不执行初始化操作,但其内容不确定。


torch.empty 是一种高效的张量创建方式,但必须谨慎使用,确保在使用张量之前已经对其内容进行了正确的赋值。


http://www.ppmy.cn/devtools/168303.html

相关文章

启幕数据结构算法雅航新章,穿梭C++梦幻领域的探索之旅——二叉树序列构造探秘——堆的奥义与实现诗篇

人无完人,持之以恒,方能见真我!!! 共同进步!! 文章目录 一、堆的定义与结构二、堆的实现1.堆的初始化和销毁堆的初始化堆的销毁 2.向上调整算法和入堆向上调整算法入堆 3.向下调整算法和出堆顶数…

深度学习之防止过拟合

过拟合是机器学习中常见的问题,特别是当模型复杂度较高或训练数据量较少时。为了避免模型过度依赖训练数据中的噪声,采取一些有效的防止过拟合的方法非常重要。以下是几种常见的防止过拟合的技术,包括 Dropout、数据增强、正则化 等,并对它们进行详细的介绍与对比。 1. Dr…

IP 协议

文章目录 IP 协议概述数据包格式首部校验和实例分析实例一 分片抓包分析参考 本文为笔者学习以太网对网上资料归纳整理所做的笔记,文末均附有参考链接,如侵权,请联系删除。 IP 协议 概述 IP 协议是 TCP/IP 协议簇中的核心协议,也…

MySQL--DDL

1、DDL-数据库操作 查询: 查询所有数据库: SHOW DATABASES; 查询当前数据库: SELECT DATABASE(); 创建: CREATE DATABASE[IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则]; 删…

JVM部分八股

什么是JVM? 有哪些好处? 索引越界可能导致程序覆盖其他程序内存中的代码 JVM是一套规范,有多种实现 JVM运行流程? 1.类加载器将java程序翻译为java字节码文件 2.运行数据区将字节码文件加载到内存,字节码文件是J…

【计算机视觉】工业表计读数(2)--表计检测

1. 简介 工业表计(如压力表、电表、气表等)在工控系统、能源管理等领域具有重要应用。然而,传统人工抄表不仅工作量大、效率低,而且容易产生数据误差。近年来,基于深度学习的目标检测方法在工业检测中展现出极大优势&…

【第13节】windows sdk编程:GDI编程

目录 一、GDI 概述 二、设备环境概念 三、使用 GDI 绘图对象 四、使用 GDI 坐标系统 五、使用GDI绘图 5.1 输出文字 5.2 画点和线 5.3 画矩形框、圆和多边形 5.4 画位图和图标 5.5 双缓冲技术 六、综合代码示例 一、GDI 概述 Windows 应用程序不支持标准输出函数&am…

【最佳实践】Go 状态模式

设计思路 状态模式的核心在于将对象的行为封装在特定的状态类中,使得对象在不同的状态下表现出不同的行为。每个状态实现同一个接口,允许对象在运行时通过改变其内部状态对象来改变其行为。状态模式使得状态转换更加明确,并且易于扩展新的状…