张量(Tensor)作为 PyTorch 的核心数据载体,是深度学习模型构建、数据处理、数值计算的基石。在实际开发中,快速创建规范的初始化张量,是提升代码效率、保证模型训练稳定性的关键一步。

本文将深度拆解 PyTorch 中全零张量、全一张量、指定值张量的创建方法、核心语法、应用场景,搭配可视化图表与关键代码,带你彻底掌握张量初始化的核心技巧!


一、开篇:为什么要学习标准化张量创建?

在深度学习任务中,我们很少直接使用随机张量完成初始化——

✅ 线性回归需要偏置项初始化为 0

✅ 图像预处理需要生成全白/全黑掩码图

✅ 模型权重初始化需要统一数值的张量

✅ 基于现有张量形状快速生成匹配张量

这些高频场景,都依赖 zeros/ones/fill 系列函数。掌握它们,能让你的代码更简洁、更高效、更易维护!


二、核心张量创建函数总览 📊

为了让大家直观对比函数差异,先通过表格汇总核心 API:

函数名称 核心功能 传参方式 适用场景
torch.ones() 创建全 1 张量 直接传入形状 (h, w) 初始化权重、生成全 1 掩码
torch.ones_like() 按现有张量形状创建全 1 张量 传入 Tensor 对象 形状匹配、数据对齐
torch.zeros() 创建全 0 张量 直接传入形状 (h, w) 偏置项初始化、全黑图
torch.zeros_like() 按现有张量形状创建全 0 张量 传入 Tensor 对象 与输入数据形状统一
torch.full() 创建指定值张量 size=(h,w), fill_value=val 自定义数值张量(如全 255 图)
torch.full_like() 按现有张量形状创建指定值张量 传入 Tensor + 填充值 图像掩码、自定义初始化
📌 表格说明:_like 后缀函数无需手动指定形状,自动复用输入张量的维度,是工程开发中的首选写法。

三、张量创建逻辑可视化 🎯

为了帮你理解 直接创建_like 创建 的核心区别,用 Mermaid 流程图展示执行逻辑:

是✅

否❌

输入需求

是否需要匹配现有张量形状?

使用 ones_like/zeros_like/full_like

使用 ones/zeros/full 直接指定尺寸

自动继承张量形状+填充目标值

手动定义维度+填充目标值

生成目标初始化张量

图表说明

  1. 当你需要和已有数据(如图像、特征图)维度对齐时,优先选择 _like 系列函数;

  2. 当你需要自定义维度时,直接使用基础函数指定行列数即可;

  3. 两种路径最终都会生成标准化的初始化张量,满足不同开发需求。


四、逐函数精讲 + 关键代码演示 💻

1. 全一张量:ones() & ones_like()

全 1 张量是最常用的初始化张量之一,常用于权重初始化、归一化计算。

核心代码(关键片段)

import torch
# 1. 直接创建:2行3列全一张量
tensor_ones = torch.ones(2, 3)
# 2. 基于现有张量形状创建
src_tensor = torch.tensor([[1,2],[3,4]])  # 2x2 原始张量
new_ones = torch.ones_like(src_tensor)   # 自动生成 2x2 全 1 张量

文字解析

  • torch.ones(shape):直接接收维度参数,快速生成指定大小的全 1 张量;

  • torch.ones_like(tensor)零维度出错风险,完全继承输入张量的形状,工程中更安全。


2. 全零张量:zeros() & zeros_like()

全零张量是深度学习偏置项(bias)初始化的标准选择,在公式 y = w x + b y = wx + b y=wx+b 中,默认将 b b b 初始化为全 0。

核心代码(关键片段)

# 直接创建 3x3 全零张量
tensor_zeros = torch.zeros(3, 3)

# 基于现有张量生成全零张量
zeros_like_tensor = torch.zeros_like(src_tensor)

文字解析

全零张量的核心价值:无干扰初始化,让模型训练从纯线性关系起步,避免初始偏置影响收敛速度。


3. 指定值张量:full() & full_like()

这是最灵活的张量创建方式,可填充任意数值,255 是图像领域的高频值(RGB 白色上限、灰度图最大值)。

核心代码(关键片段)

# 创建 2x3 全 255 张量(图像全白图专用)
tensor_full = torch.full(size=(2, 3), fill_value=255)

# 基于现有形状生成指定值张量
full_like_tensor = torch.full_like(src_tensor, fill_value=100)

文字解析

  • fill_value 可自定义任意数值,整数、浮点数均可;

  • 图像任务中:0 = 纯黑,255 = 纯白,是掩码图、分割任务的核心初始化方式。


五、高频应用场景深度解读 ✨

场景 1:线性模型偏置初始化

y = w x + b y = wx + b y=wx+b 中,偏置项必须用全零张量初始化,保证模型初始状态无偏移。

这也是 zeros() 函数最经典的工业级用法。

场景 2:计算机视觉图像生成

RGB 图像像素值范围:0 ~ 255

  • 全黑图:zeros() / zeros_like()

  • 全白图:full(fill_value=255) / full_like(..., 255)

这是图像掩膜、绘制轮廓、数据增强的基础操作。

场景 3:形状对齐与数据匹配

处理批量数据时,输入张量形状不固定,手动写死维度极易报错。

_like 系列函数完美解决这个问题,自动匹配形状,零报错


六、高效编码小技巧 ⚡

  1. 导包快捷键:PyTorch 开发中,Alt + 回车 一键导包,提升效率;

  2. 代码排版Alt + Shift + ↓ 快速移动代码行,让结构更清晰;

  3. 优先选择:能用 _like 就不用手动指定形状,降低 Bug 率。


七、课后任务 📌

  1. 找班任获取电子名单,用于课堂随机提问;

  2. 动手实践:用今天学到的函数,分别创建全零、全一、全 255 张量;

  3. 尝试用 _like 函数,基于自定义张量生成匹配形状的初始化张量。


八、总结 🎯

基础三剑客zeros/ones/full → 自定义形状创建张量

安全三剑客zeros_like/ones_like/full_like → 自动匹配形状

核心价值:代码简洁、零错误、工业标准、覆盖 80% 初始化场景

图像口诀:0 是黑,255 是白,线性模型偏置用零最稳妥

PyTorch 张量初始化是深度学习的第一步,也是最关键的一步。把基础打扎实,后续模型构建、训练调优都会事半功倍!


Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐