1 一些操作含义
- 下划线后缀含义:
在touch中函数后面加下划线代表是原位(In-place)操作,也就是内存的位置不变化,比如torch.add(value)和torch.add_(value)
备注:In-place运算是一种直接改变给定线性函数、向量、矩阵(张量)内容而不复制的运算,因此在操作高维数据时,它能够减少内存使用 - like后缀含义:
在touch中函数后缀有like代表生成的形状维度与输入矩阵的形状维度一致
2 常用函数
torch.squeeze
- torch.squeeze(input, dim=None, out=None)
将输入张量形状中的1 去除并返回。 如果输入是形如(A×1×B×1×C×1×D)
,那么输出形状就为: (A×B×C×D)
当给定dim时,那么挤压操作只在给定维度上。例如,输入形状为: (A×1×B)
, squeeze(input, 0) 将会保持张量不变,只有用 squeeze(input, 1),形状会变成 (A×B)
。 - 如果dim为负,则将会被转化dim+input.dim()+1,(可以记为从后往前数维度)。dim的维度范围([-input.dim() - 1, input.dim() + 1)
- 参数:
tensor (Tensor) – 输入张量
dim (int) – 插入维度的索引
out (Tensor, optional) – 结果张量
具体代码示例
‘’’
import torch
x = torch.zeros(2,1,2,1,2)
x.size()
torch.Size([2, 1, 2, 1, 2])
y=torch.squeeze(x)
y.shape
torch.Size([2, 2, 2])
y=torch.squeeze(x,0)
y.shape
torch.Size([2, 1, 2, 1, 2])
y=torch.squeeze(x,1)
y.size()
torch.Size([2, 2, 1, 2])
y=torch.squeeze(x,-4)
y.shape
torch.Size([2, 2, 1, 2])
‘’’
torch.unsqueeze
torch.unsqueeze(input, dim, out=None),squeeze的逆操作,返回一个新的张量,对输入的指定位置插入维度 1。
具体代码示例
‘’’
x = torch.tensor([1, 2, 3, 4])
x
tensor([1, 2, 3, 4])
torch.unsqueeze(x, 0)
tensor([[1, 2, 3, 4]])
torch.unsqueeze(x, 1)
tensor([[1],
[2],
[3],
[4]])
‘’’
torch.transpose
torch.transpose(input, dim0, dim1, out=None) → Tensor,返回输入矩阵input的转置。交换维度dim0和dim1。
如果输入是一个跨步张量,则结果张量与输入张量共享其底层存储,因此更改其中一个的内容将更改另一个的内容。
如果输入是一个稀疏张量,则结果张量不与输入张量共享底层存储。
参数:
input (Tensor) – 输入张量
dim0 (int) – 转置的第一维
dim1 (int) – 转置的第二维
‘’’
x=torch.randn(2,3,4)
x
tensor([[[-2.2487, -0.5821, 1.1262, 0.7496],
[ 0.8734, 1.6248, -0.5010, 0.7022],
[ 0.4190, 1.6377, -0.1449, 1.1198]],
[[ 0.2262, -0.8953, -2.3222, 1.6512],
[ 0.7219, -0.1876, 0.6869, -0.3515],
[-1.2393, 0.7014, -0.3381, -0.7055]]])
torch.transpose(x,0,1)
tensor([[[-2.2487, -0.5821, 1.1262, 0.7496],
[ 0.2262, -0.8953, -2.3222, 1.6512]],
[[ 0.8734, 1.6248, -0.5010, 0.7022],
[ 0.7219, -0.1876, 0.6869, -0.3515]],
[[ 0.4190, 1.6377, -0.1449, 1.1198],
[-1.2393, 0.7014, -0.3381, -0.7055]]])
‘’’
随机数生成
函数 | 生成类型 |
---|---|
normal | 离散正态分布中随机抽取浮点数 |
rand | 从区间[0,1)的均匀分布中抽取的随机抽取一组浮点数 |
randn | 从标准正态分布(均值为0,方差为 1)中随机抽取一组浮点数 |
randint | 半开区间[start, end),从start开始到end之间均匀生成的随机整数 |
randperm | 给定参数n,返回一个从0 到n -1 的随机整数 |
range | 区间[start, end],从start开始到end,以step为步长的一组值(不建议使用) |
arange | 半开区间[start, end),从start开始到end,以step为步长的一组值,当start和end都为整数,输出整数值,有一个为浮点数,则输出浮点数 |