Pytorch生成Tensor常用方法汇总

本文总结了PyTorch中生成Tensor的各种方法,包括均匀分布、标准正态分布、离散正态分布、线性间距向量、全0/1张量以及固定数值填充的Tensor创建。通过这些方法,可以方便地在PyTorch中生成不同分布和特性的随机数张量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

知识整理,便于以后查找。
本文是对pytorch生成Tensor常用方法的小结

均匀分布

torch.rand(*sizes, out=None) → Tensor
返回一个张量,包含了从区间[0,1]的均匀分布中抽取的随机的一组随机数,张量形状有参数size定义。
参数:

  • size: 张量形状
>>> import torch
>>> a = torch.rand((2,3))
>>> a
tensor([[0.2969, 0.8017, 0.9024],
        [0.0810, 0.2303, 0.7425]])

标准正态分布

torch.rand(*sizes, out=None)–>Tensor
返回一个张量,包含了从标准正态分布(均值为0, 方差为1,即高斯白噪音)中抽取的一组随机数,张量形状由size定义

>>> b = torch.randn((3 ,2))
>>> b
tensor([[ 0.6700,  1.4233],
        [-2.0809,  0.5361],
        [-0.5831, -0.3056]])

离散正态分布

torch.normal(means, std, out=None)–> Tensor
返回张量,包含了指定 均值means和标准差std的离散正态分布中抽取的一组随机数,标准差std是一个张量,包含了每个输出元素相关的正态分布标准差
参数:
means (float, optional) - 均值
std (Tensor) - 标准差
out (Tensor) - 输出张量

>>> c = torch.normal(mean=0.5, std=a)
>>> c
tensor([[ 0.2432,  1.0196, -0.0108],
        [ 0.6004,  0.3536,  0.6800]])
>>> a
tensor([[0.2969, 0.8017, 0.9024],
        [0.0810, 0.2303, 0.7425]])

线性间距向量

torch.linespace(start, end, steps=100, out=None)–>Tensor
返回一个张量,包含在区间start和end上均匀间隔step个点
输出张量的长度由steps决定。
参数:
start (float) - 区间的起始点
end (float) - 区间的终点
steps (int) - 在start和end间生成的样本数
out (Tensor, optional) - 结果张量

>>> d= torch.linspace(1,10,10)
>>> d
tensor([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])

torch.arange(start, end, step)
返回一维张量,形状为 (end-start)/step,数值在[start, end]间
参数:
start (float) - 区间的起始点
end (float) - 区间的终点
step (int,float) - 数值增加步伐 start+step
out (Tensor, optional) - 结果张量

>>> g = torch.arange(1,10, 1)
tensor([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> g = torch.arange(1,10, 1.6)
tensor([1.0000, 2.6000, 4.2000, 5.8000, 7.4000, 9.0000])

全0/1

torch.ones(input.size(), dtype=input.dtype, layout=input.layout, device=input.device)
参数:input_size: 生成张量形状

>>> e = torch.ones((2,5))
>>> e
tensor([[1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.]])

torch.zeros()与torch.ones类似

>>> f =torch.zeros((2,5))
>>> f
tensor([[0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.]])

固定数值

troch.full(size, fill_value)
参数:
size: 生成张量的大小,list, tuple, torch.size
fill_value: 填充张量的数

>>> torch.full((2,3),23)
tensor([[23., 23., 23.],
        [23., 23., 23.]])
<think>嗯,用户想找PyTorch的语法总结或者教程汇总。首先,我需要看看用户提供的引用内容,里面有关于PyTorch的一些基础知识点,比如继承nn.Module、张量操作、点操作符的使用,还有设备迁移的问题。用户可能希望有一个系统的语法大全,方便查阅。 用户的问题比较广泛,可能需要分模块整理。比如模型构建、张量操作、自动求导、设备管理、损失函数和优化器,还有训练流程。每个部分都需要涵盖常见语法和示例,这样用户能快速找到需要的内容。 然后,根据用户提供的引用,比如引用[1]讲的是模型类的继承,引用[2]和[4]涉及张量运算,引用[3]提到点操作符和函数调用,引用[5]关于设备迁移。这些内容应该分别归类到对应的模块里。 另外,用户可能需要相关的问题来进一步学习。比如模型构建的常见错误,张量乘法区别,自动求导的应用,多GPU训练的实现,以及训练循环的关键步骤。这些问题可以帮助用户深入理解各个部分。 还要注意引用格式,每个引用标识要正确对应到用户提供的参考内容。例如,引用[^1]对应模型类,引用[^2]和[^4]对应张量操作,引用[^3]和[^5]对应设备管理部分。 最后,确保回答结构清晰,分点明确,代码示例正确,并且相关问题的生成能覆盖用户可能遇到的疑问。这样用户就能有一个全面的PyTorch语法参考,满足他们的需求。</think>### PyTorch 语法核心要点汇总 根据您提供的引用内容,我整理了以下PyTorch语法重点模块: #### 一、模型构建基础 1. **神经网络类定义** 所有神经网络必须继承$nn.Module$类,需实现构造函数`__init__`和前向传播`forward`方法[^1] ```python import torch.nn as nn class MyModel(nn.Module): def __init__(self): super().__init__() self.conv = nn.Conv2d(3, 64, kernel_size=3) def forward(self, x): return self.conv(x) ``` 2. **参数访问** 通过`model.parameters()`获取可训练参数[^3] ```python for param in model.parameters(): print(param.shape) ``` #### 二、张量运算语法 1. **基础运算类型** - 点积:`torch.dot()`(仅限一维向量)[^2] - 矩阵乘法:`torch.matmul()`或`@`运算符[^2] - 高维张量运算: $$ \text{当} A.shape=(m,n), B.shape=(b,n,k) \text{时}, matmul(A,B).shape=(b,m,k) $$[^4] 2. **广播机制示例** ```python a = torch.ones(2,3) b = torch.ones(3,4) c = a @ b # 结果形状(2,4) ``` #### 三、自动求导系统 1. **梯度追踪** 使用`requires_grad=True`启用自动微分 ```python x = torch.tensor([1.0], requires_grad=True) y = x**2 y.backward() print(x.grad) # 输出2.0 ``` #### 四、设备管理语法 1. **多设备支持** 推荐使用`.to(device)`代替`.cuda()` ```python device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") model = model.to(device) data = data.to(device) ``` #### 五、损失函数与优化器 1. **标准配置模式** ```python criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.001) ``` #### 六、训练流程模板 ```python for epoch in range(epochs): optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() ``` §§ 相关问题 §§ 1. 如何在自定义层中正确实现反向传播? 2. `torch.mm()`与`torch.matmul()`的区别是什么? 3. 多GPU训练时如何正确分配设备? 4. 为什么梯度需要手动清零(`zero_grad()`)? 5. 训练循环中常见的流程控制要点有哪些? [^1]: 模型类继承规范 : 张量运算基础 : 方法调用语法 : 高维张量乘法规则 : 多设备支持实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值