pytorch api文档:torch.zeros()创建全零张量

介绍

torch.zeros() 函数,这是创建全零张量最基础也最常用的函数,在初始化权重、构建掩码、占位符等场景中高频使用,我会从基础用法、参数细节到实战技巧帮你全面掌握。

作用

创建一个指定形状、所有元素值都为 0 的张量。是 PyTorch 中“创建固定值张量”的基础函数(同类还有 torch.ones() 创全1张量、torch.full() 创指定值张量),常用来初始化空张量或作为计算的初始值。

语法

torch.zeros(size, dtype=None, device=None, requires_grad=False)

参数:

参数 作用 常用场景
size 张量的形状,可以是单个整数、多个整数,或元组/列表(如 (2,3)) 核心参数,必传;torch.zeros((2,3)) 等价于 torch.zeros(2,3)
dtype 指定张量的数据类型(如 torch.float32/torch.int64) 默认是 torch.float32(浮点型),需整数全零张量时手动指定 dtype=torch.int
device 指定张量存储的设备(cpu/cuda) 深度学习中需和模型/数据同设备,如 device="cuda:0"
requires_grad 是否需要计算梯度(布尔值) 仅初始化可训练参数时设为 True,普通占位符设为 False(默认)

维度顺序:

torch.zeros(2,3) 是 2 行 3 列的二维张量,而非 3 行 2 列,需注意形状参数的顺序(先行后列);

例子

基础示例

先通过代码掌握核心用法,size 是唯一必传的核心参数:

import torch

# 示例1:创建一维全零张量(指定单个维度)
zeros_1d = torch.zeros(3)
print("一维全零张量:", zeros_1d)  # tensor([0., 0., 0.])
print("形状:", zeros_1d.shape)    # torch.Size([3])

# 示例2:创建二维全零张量(指定多个维度,常用矩阵场景)
zeros_2d = torch.zeros(2, 3)
print("二维全零张量:\n", zeros_2d)
# 输出:
# tensor([[0., 0., 0.],
#         [0., 0., 0.]])
print("形状:", zeros_2d.shape)    # torch.Size([2, 3])

# 示例3:创建高维全零张量(批量矩阵场景)
zeros_3d = torch.zeros(4, 2, 3)  # 4个 2×3 的全零矩阵
print("三维全零张量形状:", zeros_3d.shape)  # torch.Size([4, 2, 3])

进阶参数示例

# 示例1:指定数据类型(整数全零张量)
zeros_int = torch.zeros(2, 3, dtype=torch.int64)
print("整数全零张量:\n", zeros_int)
# 输出:
# tensor([[0, 0, 0],
#         [0, 0, 0]])
print("数据类型:", zeros_int.dtype)  # torch.int64

# 示例2:指定设备(GPU张量,需有CUDA环境)
if torch.cuda.is_available():
    zeros_cuda = torch.zeros(2, 3, device="cuda")
    print("GPU张量设备:", zeros_cuda.device)  # cuda:0
else:
    print("无CUDA环境,默认创建CPU张量")

# 示例3:可求梯度的全零张量(初始化可训练参数)
zeros_grad = torch.zeros(2, 3, requires_grad=True)
print("是否可求梯度:", zeros_grad.requires_grad)  # True

应用场景

(1)初始化模型参数

在自定义模型时,常用来初始化偏置(bias)等参数:

# 模拟:初始化一个线性层的偏置
bias = torch.zeros(10, requires_grad=True)  # 10个输出维度的偏置,可求梯度
print("偏置参数:", bias)  # tensor([0., 0., ..., 0.], requires_grad=True)

(2)创建掩码/占位符

在数据处理中,常用来创建空张量存储结果,避免频繁创建新张量:

# 模拟:批量处理数据,先创建全零占位符
batch_size = 4
feature_dim = 5
output = torch.zeros(batch_size, feature_dim)  # 占位符

# 填充数据(模拟批量计算)
for i in range(batch_size):
    output[i] = torch.randn(feature_dim)  # 用随机数填充每一行

print("填充后的张量:\n", output)

(3)与其他函数结合(zeros_like)

如果想创建和已有张量形状/类型/设备完全一致的全零张量,优先用 torch.zeros_like(),更简洁:

x = torch.tensor([[1.5, 2.3], [3.1, 4.2]], device="cpu", dtype=torch.float32)
# 创建和x相同属性的全零张量
zeros_like_x = torch.zeros_like(x)

print("zeros_like结果:\n", zeros_like_x)
print("形状一致:", zeros_like_x.shape == x.shape)  # True
print("设备一致:", zeros_like_x.device == x.device)  # True

常见易错点

  1. 数据类型隐式转换:全零浮点张量(默认)和整数张量运算时,会自动转为浮点型,需注意类型匹配;
  2. 设备不匹配:如果模型在 GPU 上,而 torch.zeros() 默认创建 CPU 张量,直接运算会报错,需指定 device 参数。

总结

  1. torch.zeros() 是创建指定形状全零张量的核心函数,默认创建 float32 类型的 CPU 张量。
  2. 关键参数:size 定义形状,dtype 指定数据类型,device 指定存储设备,requires_grad 控制是否可求梯度。
  3. 实战技巧:需和已有张量属性一致时,优先用 torch.zeros_like();初始化可训练参数时记得设 requires_grad=True。

原文出处:/show_1GW2bn8nGC4P.html