deepseek问答记录:请讲解一下torch.full_like()

torch.full_like() 是 PyTorch 中的一个张量创建函数,用于创建一个与输入张量形状相同但所有元素值都填充为指定标量值的新张量。下面详细讲解其用法和特性:

1. 函数签名

python 复制代码
torch.full_like(input, fill_value, *, dtype=None, layout=None, device=None, requires_grad=False, memory_format=torch.preserve_format)

2. 参数说明

  1. input (Tensor)
  • 输入张量,新张量将继承其形状(shape)。

  • 不修改原张量,仅参考其形状。

  1. fill_value (标量)
  • 新张量中所有元素的值(填充值)。
  1. 关键字参数(可选):
  • dtype (torch.dtype):新张量的数据类型。默认与 input 相同。

  • device (torch.device):新张量所在的设备(CPU/GPU)。默认与 input 相同。

  • requires_grad (bool):是否需要梯度(用于自动求导)。默认 False。

  • layout (torch.layout):内存布局(如 torch.strided)。默认与 input 相同。

  • memory_format (torch.memory_format):内存格式。默认 torch.preserve_format(保留输入格式)。

3. 核心特性

形状继承:新张量形状与 input 完全一致。

全同填充:所有元素值均为 fill_value。

灵活性:可通过关键字参数覆盖输入张量的属性(如数据类型、设备等)。

示例代码

python 复制代码
import torch

# 示例1:基础用法
x = torch.tensor([[1, 2], [3, 4]])  # 形状 (2, 2)
y = torch.full_like(x, fill_value=5)
print(y)
# 输出:
# tensor([[5, 5],
#         [5, 5]])

# 示例2:指定数据类型(覆盖输入类型)
z = torch.full_like(x, fill_value=3.14, dtype=torch.float32)
print(z)
# 输出:
# tensor([[3.1400, 3.1400],
#         [3.1400, 3.1400]])

# 示例3:改变设备(如GPU)
if torch.cuda.is_available():
    device = torch.device("cuda")
    x_gpu = x.to(device)
    w = torch.full_like(x_gpu, fill_value=10, dtype=torch.float16)
    print(w.device)  # 输出: cuda:0

# 示例4:创建需要梯度的张量
v = torch.full_like(x, fill_value=2.0, dtype=torch.float32, requires_grad=True)
print(v.requires_grad)  # 输出: True

4. 与相关函数的对比

函数 描述 区别
torch.full_like(input, fill_value) 按输入张量形状填充 形状来自 input
torch.full(size, fill_value) 直接指定形状填充 需手动设置 size
torch.ones_like(input) 创建全1张量 固定填充值 1
torch.zeros_like(input) 创建全0张量 固定填充值 0

5. 典型应用场景

5.1 初始化固定值张量

快速创建与现有张量形状相同的常量张量(如掩码、偏置)。

python 复制代码
  mask = torch.full_like(image_tensor, fill_value=0)  # 创建全0掩码

5.2 指定数据类型/设备

在保持形状的同时转换数据类型或设备。

python 复制代码
      # 在GPU上创建与x形状相同的全1张量(float32类型)
   ones_gpu = torch.full_like(x, 1.0, dtype=torch.float32, device="cuda")

5.3 梯度计算准备

创建需要梯度跟踪的常量张量。

python 复制代码
learnable_bias = torch.full_like(output, 0.1, requires_grad=True)

6. 注意事项

6.1 数据类型一致性:

如果 fill_value 与 dtype 不兼容(如用整数填充浮点类型),PyTorch 会自动转换:

python 复制代码
  a = torch.full_like(x, 3.14, dtype=torch.int)  # 值会被截断为整数3

6.2 内存格式:

默认 memory_format=torch.preserve_format 会继承输入格式,如需特定格式(如通道优先),需显式指定:

python 复制代码
nchw_tensor = torch.full_like(input, 0, memory_format=torch.contiguous_format)

6.3 无原地操作:

此函数总是返回新张量,不修改输入张量。


通过 torch.full_like(),您可以高效创建与现有张量形状匹配的常量张量,同时灵活控制数据类型、设备等属性,非常适合深度学习中的张量初始化操作。

相关推荐
dbdr090122 分钟前
Linux 入门到精通,真的不用背命令!零基础小白靠「场景化学习法」,3 个月拿下运维 offer,第二十六天
linux·运维·服务器·网络·python·学习
花花无缺27 分钟前
python自动化-pytest-用例发现规则和要求
后端·python
YUELEI1181 小时前
langchain 提示模版 PromptTemplate
python·langchain
东方不败之鸭梨的测试笔记1 小时前
LangChain: Models, Prompts 模型和提示词
人工智能·python·langchain
yzx9910131 小时前
图像去雾:从暗通道先验到可学习融合——一份可跑的 PyTorch 教程
人工智能·pytorch·学习
AI Echoes2 小时前
别再手工缝合API了!开源LLMOps神器LMForge,让你像搭积木一样玩转AI智能体!
人工智能·python·langchain·开源·agent
AI Echoes2 小时前
从零构建企业级LLMOps平台:LMForge——支持多模型、可视化编排、知识库与安全审核的全栈解决方案
人工智能·python·langchain·开源·agent
2401_897930062 小时前
PyTorch 中训练语言模型过程
人工智能·pytorch·语言模型
beijingliushao2 小时前
58-正则表达式
数据库·python·mysql·正则表达式
陈敬雷-充电了么-CEO兼CTO3 小时前
具身智能多模态感知与场景理解:融合语言模型的多模态大模型
人工智能·python·gpt·语言模型·自然语言处理·chatgpt·多模态