张量的计算
数学运算
四则运算
±*(@)/,必须满足矩阵运算的条件
加.
表示矩阵对应位置进行操作
-
高维矩阵乘法
torch.matmul(a,b)
对a,b的最后两维度进行矩阵乘法,其他维度不变。高维矩阵的乘法计算,本质上是支持了多个矩阵乘法的并行计算
判断相等
torch.eq(a,b)
乘方
.pow(2)
或a**2
.rsqrt()
或a**(0.5)
指数
torch.exp()
对数
torch.log
()
近似运算
.floor()
向下取整
.ceil()
向上取整
.round()
四舍五入
.trunc()
取整数部分 .frac()
取小数部分
数值裁剪
.clamp(num1=0,num2)
将大于num2的数裁剪为num2,将小于num1的数裁剪为num1
统计
范数Norm
向量的p-Norm的定义是
p-Norm: ∣ ∣ x ∣ ∣ p = ( ∑ i = 1 n ∣ x i ∣ p ) 1 / p ||x||_p=(\sum_{i=1}^n|x_i|^p)^{1/p} ∣∣x∣∣p=(∑i=1n∣xi∣p)1/p
矩阵的p-Norm的定义是
1-Norm: ∣ ∣ A ∣ ∣ 1 = M a x 1 < = j < = n ∑ i = 1 n ∣ a i j ∣ ||A||_1=\underset{1<=j<=n}{Max}\sum_{i=1}^n|a_{ij}| ∣∣A∣∣1=1<=j<=nMax∑i=1n∣aij∣
2-Norm: ∣ ∣ A ∣ ∣ 2 = ∑ i = 1 n ∑ j = 1 n a i j 2 ||A||_2=\sqrt{\sum_{i=1}^n\sum_{j=1}^{n}a_{ij}^2} ∣∣A∣∣2=∑i=1n∑j=1naij2
p_Norm: ∣ ∣ A ∣ ∣ p = ( ∑ i = 1 n ∑ j = 1 n a i j p ) 1 / p ||A||_p=(\sum_{i=1}^n\sum_{j=1}^na_{ij}^p)^{1/p} ∣∣A∣∣p=(∑i=1n∑j=1naijp)1/p
我们常使用2-范数来表示向量或者矩阵的“长度”
.norm(dim,p)
可以求指定维度dim的指定p-Norm
如果张量是1维则求向量的范数,如果张量是二维则求矩阵的范数,如果张量是高维度的,可以求指定维度的范数,计算原理是指定哪一个维度,就合并哪一个维度
例如:
import torch
d = torch.arange(8, dtype= torch.float).reshape(2,2,2)
print(d)
#tensor([[[0., 1.],
# [2., 3.]],
# [[4., 5.],
# [6., 7.]]])
print(torch.norm(d,dim=0))
#tensor([[4.0000, 5.0990],
# [6.3246, 7.6158]])
进行的操作为:
例如:
import torch
d = torch.arange(8, dtype= torch.float).reshape(2,2,2)
print(d)
#tensor([[[0., 1.],
# [2., 3.]],
# [[4., 5.],
# [6., 7.]]])
print(torch.norm(d,dim=1))
#tensor([[2.0000, 3.1623],
# [7.2111, 8.6023]])
进行的操作为:
最值
.max()
.min()
- 可以指定dim返回指定维度的最值
- 返回两个张量,一个张量记录最值,一个张量记录最值所在的位置
最值的索引
.argmax()
.argmin()
- 可以指定dim返回指定维度上的最大最小值索引
- 对于高维向量,返回的是打平之后的下标。
前K最值
.topk(k,dim,largest)
- 返回两个张量,一个张量记录前K最值,一个张量记录前K最值所在的位置
- 可以指定dim返回指定维度的前K值
- 默认求前K大值,largest=false求前K小值
第K值
.kthvalue(k,dim)
- 默认求第K小的值和位置
- 可以指定dim返回指定维度的第K小值
均值
.mean()
累乘
.prod()
求和
.sum()
保持维度
keepdim
参数设置为true时返回的结果与原来的矩阵维度数保持相同,压缩掉的维度用size=1的维度来填补
比较
符号比较
> >= < <= != == .eq()
- 只有shape完全一样的张量才能比较,返回一个相同shape的张量,记录每一个位置元素的比较结果
where
torch.
where(condition, x, y)
- x,y的shape必须一样
- 输出一个相同shape的张量,如果满足条件conditon就从x取元素,否则从y取元素
- 好处:此函数支持GPU加速,如果使用for循环加判断则只能在CPU上运行
gather
torch.
gather(input, dim, index)
- 在input的dim维度上按照index指示的索引查表,返回的张量shape和index相同
- 好处:此函数支持GPU加速,如果使用for循环加判断则只能在CPU上运行
例如:
更换标签任务
#原来的标签
#tensor([[0., 1., 2., 3.],
# [4., 5., 6., 7.]])
#需要更换为
#tensor([[100., 101., 102., 103.],
# [104., 105., 106., 107.]])
import torch
d = torch.arange(8, dtype= torch.float).reshape(2,4)
print(d)
#原来的标签
#tensor([[0., 1., 2., 3.],
# [4., 5., 6., 7.]])
label=torch.arange(10)+100
print(label)
#新标签的取值范围
#tensor([100, 101, 102, 103, 104, 105, 106, 107, 108, 109])
new=torch.gather(label.expand(2,10),dim=1,index=d.long())
print(new)
#替换
#tensor([[100, 101, 102, 103],
# [104, 105, 106, 107]])