-
一 . 基本操作函数
1. torch.empty():创建一个未被初始化的tensor,tendsor的大小是由size确定的,即返回形状为size的空tensor
torch.empty(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) → Tensor
size:定义tensor的shape
2. torch.rand(*sizes, out=None) → Tensor
均匀分布:返回一个张量,包含了从区间[0, 1)的均匀分布中抽取的一组随机数,张量的形状由参数sizes定义
torch.rand_like(input)返回一个跟input的tensor一样size的0-1随机数
3. torch.randn(*sizes, out=None) → Tensor标准正太分布
返回一个张量,包含了从标准正态分布(均值为0,方差为1,即高斯白噪声)中抽取的一组随机数。张量的形状由参数sizes定义。
4.torch.normal(means, std, out=None) → → Tensor
离散正太分布
5. 线性间距离
torch.linspace(start, end, steps=100, out=None) → Tensor
返回一个1维张量,包含在区间start和end上均匀间隔的step个点。
6. torch.nmuel()返回元素数目
7. torch.dim()
在 tensor 的指定维度操作就是对指定维度包含的元素进行操作,如果想要保持结果的维度不变,设置参数keepdim=True
即可。
8. torch.full()
举例:In:torch.full([2, 3], 7) Out: tensor([[7., 7., 7.], [7., 7., 7.]])
9. torch.
arange
(start=0, end, step=1, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) → Tensor 不包含end
torch.
range
(start=0, end, step=1, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) → Tensor 包含end
10. linspace/logspace
#生成0到10的4个数构成的等差数列
a = torch.linspace(0,10,steps=4)
#生成10的0次方为起始值,10的-1次方为终止值的8个数构成的等比数列
c = torch.logspace(0,-1,steps=8)
11. ones/zeros/eye
12. randperm()
randperm功能是随机打乱一个数字序列。
语法格式:
y = torch.randperm(n)
y是把0到n-1这些数随机打乱得到的一个数字序列。
13. torch.all()判断每个位置的元素是否相同,判断是否有0的元素
14. torch.t()表示转置,高维转置用torch.transpose()函数
15. torch.max()最大值,torch.median()中间值
17. torch.prod(input) : 返回所有元素的乘积
索引与切片
1. torch.index_select(dim, indices)
-
dim为维度,indices是索引序号
-
这里的indeces必须是tensor ,不能直接是一个list
2. “...”表示任意多维度,根据实际shape来推断
3. torch.masked_select()
-
求掩码位置原来的元素大小
-
缺点:会把数据,默认打平(flatten)
4. torch.take(src, torch.tensor([index]))
打平后,按照index来取对应位置的元素
Tensor维度变换
1. torch.view()是改变tensor的形状,参数-1表示该位置尺寸的值由其他位置推导得出,改变形状后元素的总个数保持不变。
2. torch.reshape()按照已有的维度进行变形,元素的总个数不变
3. torch.unsqueeze()增加维度
torch.squeeze()降低维度
torch.expand()传入负的参数表示什么意思????????????
二. 基本数学运算
-
可以使用 + - * / 推荐
-
也可以使用 torch.add, mul, sub, div
In[]: torch.all(torch.ByteTensor([1,1,1,1]))
Out[]: tensor(1, dtype=torch.uint8)
In[]: torch.all(torch.ByteTensor([1,1,1,0]))
Out[]: tensor(0, dtype=torch.uint8
a = torch.rand(3, 4)
b = torch.rand(4)
c = torch.all(torch.eq(a-b, torch.sub(a, b)))
print(c)->tersor(True)
1. matmul
*要求矩阵相同位置的元素相乘,torch.matmul()是按照矩阵相乘
torch.mm()(only for 2d)不推荐
torch.matmul()等价与@
tensor.pow()求次方, **表示求方, torch.sqrt()求解平方根, torch.log(), torch.exp()(对数e的次方)
torch.floor()小数往下取整,torch.ceil()小数往上取整,torch.trunc()把小数裁剪返回小数的整数部分,torch.frac()返回小数的小数部分
torch.clamp(),gradient clipping将输入input
张量每个元素的夹紧到区间 [min,max][min,max],并返回结果到一个新张量。
torch.clamp(input, min, max, out=None) → Tensor
操作定义如下:
| min, if x_i < min
y_i = | x_i, if min <= x_i <= max
| max, if x_i > max
-
三. 统计学属性statics
norm 泛数
mean sum
prod
max,min, argmin求最小值位置, argmax求最大值位置
kthvalue, topk
1. torch.norm()对输入的tensor求解范数
torch.norm(input, p, dim, out=None,keepdim=False) → Tensor
返回输入张量给定维dim 上每行的p 范数。
参数:
input (Tensor) – 输入张量
p (float) – 范数计算中的幂指数值
dim (int) – 缩减的维度
out (Tensor, optional) – 结果张量
keepdim(bool)– 保持输出的维度 (此参数官方文档中未给出,但是很常用)
其中p,input,output,重点看dim和keepdim两个参数。
dim=0,返回结果等于列个数,dim=1返回结果等国等与行个数
2. dim/keepdim
3. torch.topk()
torch.topk(input, k, dim=None, largest=True, sorted=True, out=None) -> (Tensor, LongTensor)
当largest=True时,dim=0,返回列上最大的前k个值,并排序
当largest=True时,dim=1,返回行上最大的前k个值,并排序
说明: 沿指定dim维度返回输入张量input中k个最大值。如果不指定dim,则默认input的最后一维,如果largest为False,则返回最小的k个值。
参数:
input(Tensor) ---- 输入张量
k(int) ---- “top-k"中的k值
dim(int,可选的) ---- 排序的维度
largest(bool,可选的) ---- 布尔值,控制返回最大或最小值
sorted(bool,可选的) ---- 布尔值,控制返回值是否排序
out(tuple,可选的) ---- 可选输出张量
返回值: 返回一个元组(values, indices),其中indices是原始输入张量input中排序元素下标。如果设定布尔值sorted为True,将会确保返回的k个值被排序
4. torch.kthvalue(input, k, dim=None, out=None)
说明: 取输入张量input指定维度上第k个最小值。如果不指定dim。默认为最后一维。返回一个元组(value, indices), 其中indices是原始输入张量中沿dim维的第k个最小值下标。
参数:
input(Tensor) ---- 要对比的张量
k(int) ---- 第k个最小值
dim(int, 可选的) ---- 沿着此维度进行排序
out(tuple,可选的) ---- 输出元组
5. torch.eq(input, other, out=None)
说明: 比较元素是否相等,第二个参数可以是一个数,或者是第一个参数同类型形状的张量
参数:
input(Tensor) ---- 待比较张量
other(Tenosr or float) ---- 比较张量或者数
out(Tensor,可选的) ---- 输出张量
返回值: 一个torch.ByteTensor张量,包含了每个位置的比较结果(相等为1,不等为0)
6. torch.equal(tensor1, tensor2, out=None)
说明: 如果两个张量有相同的形状和元素值,则返回true,否则False
参数:
tensor1(Tenosr) ---- 比较张量1
tensor2(Tensor) ---- 比较张量2
out(Tensor,可选的) ---- 输出张量
7. torch.ge(input, other, out=None)
说明: 逐元素比较input和other,即是否input >= other。
参数:
input(Tensor) ---- 待对比的张量
other(Tensor or float) ---- 对比的张量或float值
out(Tensor,可选的) ---- 输出张量
4. torch.gt(input, other, out=None)
说明: 逐元素比较input和other,即是否input > other
参数:
input(Tensor) ---- 要对比的张量
other(Tensor or float) ---- 要对比的张量或float值
out(Tensor,可选的) ---- 输出张量
6. torch.le(input, other, out=None)
说明: 逐元素比较input和other,即是否input <= other.
参数:
input(Tenosr) ---- 要对比的张量
other(Tensor or float) ---- 对比的张量或float值
out(Tensor,可选的) ---- 输出张量
7. torch.lt(input, other, out=None)
说明: 逐元素比较input和other,即是否input < other
参数:
input(Tensor) ---- 要对比的张量
other(Tensor or float) ---- 对比的张量或float值
out(Tensor,可选的) ---- 输出张量
13. torch.ne(input, other, out=None)
说明: 逐元素比较input和other,即是否input 不等于 other。第二个参数可以为一个数或与第一个参数相同形状和类型的张量
参数:
input(Tensor) ---- 待对比的张量
other(Tensor or float) ---- 对比的张量或float值
out(Tensor, 可选的) ---- 输出张量
** 返回值:** 一个torch.ByteTensor 张量,包含了每个位置的比较结果,如果tensor和other不相等为True,返回1.
14. torch.sort(input, dim=None, descending=False, out=None)
说明: 对输入张量input沿指定维度按升序排序,如果不给定dim,则默认为输入的最后一维。如果指定参数descending为True,则按降序排序。
参数:
input(Tensor) ---- 要排序的张量
dim(int,可选的) ---- 沿着此维度排序
descending(bool,可选的) ---- 布尔值,控制升序排序
out(tuple,可选的) ---- 输出张量
返回值: 为ByteTensor类型或与tensor相同类型,为元组(sorted_tensor,sorted_indices),sorted_indices为原始输入中的下标
四. tensor高级操作
torch.where(condition, x, y)->Tensor
Return a tensor of elements selected from either x, or y, depending on condition.有相同的形状和元素值,则返回true,否则Falis
torch.gather(input, dim, index, out=None)->Tensor
Gathers values along an axis specified by dim
返回的tensor的size与index的size一致。dim用于指明index的元素值代表的维数。这个函数可以用来很方便地提取方阵的对角元素。
五 . 梯度求解常用函数
1. torch.autograd.grad()
def grad(outputs, inputs, grad_outputs=None, retain_graph=None, create_graph=False, only_inputs=True, allow_unused=False)
举例: 输入x,输出是y,则求y关于x的导数(梯度)