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. 语法
torch.empty(*size, *, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
- size:张量的形状,可以是一个整数序列。例如
(3, 4)
表示创建一个 3 行 4 列的张量。 - dtype:数据类型,例如
torch.float32
、torch.int64
等。默认取决于 PyTorch 的全局设置。 - device:设备,可以是
"cpu"
或"cuda"
等,用于指定张量存放的位置。 - requires_grad:是否对张量计算梯度,默认为
False
。
3. 示例代码
示例 1:创建一个 5 的未初始化张量
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 的未初始化张量
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:指定数据类型和设备
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
是一种高效的张量创建方式,但必须谨慎使用,确保在使用张量之前已经对其内容进行了正确的赋值。