pytorch api文档:torch.zeros()创建全零张量 作者:马育民 • 2026-01-17 14:00 • 阅读:10001 # 介绍 `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` 是唯一必传的核心参数: ```python 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]) ``` ### 进阶参数示例 ```python # 示例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)等参数: ```python # 模拟:初始化一个线性层的偏置 bias = torch.zeros(10, requires_grad=True) # 10个输出维度的偏置,可求梯度 print("偏置参数:", bias) # tensor([0., 0., ..., 0.], requires_grad=True) ``` ### (2)创建掩码/占位符 在数据处理中,常用来创建空张量存储结果,避免频繁创建新张量: ```python # 模拟:批量处理数据,先创建全零占位符 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()`,更简洁: ```python 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`。 原文出处:http://malaoshi.top/show_1GW2bn8nGC4P.html