torch tensor 计算

torch tensor 计算
foresta.yangtorch.mean()
mean()函数的参数:dim=0,按行求平均值,返回的形状是(1,列数);dim=1,按列求平均值,返回的形状是(行数,1),默认不设置dim的时候,返回的是所有元素的平均值。
torch.pow()
功能: 实现张量和标量之间逐元素求指数操作, 或者在可广播的张量之间逐元素求指数操作.
torch.stack()
官方解释:沿着一个新维度对输入张量序列进行连接。 序列中所有的张量都应该为相同形状。
注:
python
的序列数据只有list
和tuple
。浅显说法:把多个2维的张量凑成一个3维的张量;多个3维的凑成一个4维的张量…以此类推,也就是在增加新的维度进行堆叠。
outputs = torch.stack(inputs, dim=?) → Tensor
torch.clamp()
torch.clamp(input, min, max, out=None) → Tensor
将输入
input
张量每个元素的夹紧到区间 [min,max][min,max],并返回结果到一个新张量。
torch.bmm()
计算两个tensor的矩阵乘法,torch.bmm(a,b),tensor a 的size为(b,h,w),tensor b的size为(b,w,m) 也就是说两个tensor的第一维是相等的,然后第一个数组的第三维和第二个数组的第二维度要求一样,对于剩下的则不做要求,输出维度 (b,h,m);
torch.squeeze()函数
torch.squeeze(input, dim=None, out=None)
squeeze()函数的功能是维度压缩。返回一个tensor(张量),其中 input 中大小为1的所有维都已删除。
举个例子:如果 input 的形状为 (A×1×B×C×1×D),那么返回的tensor的形状则为 (A×B×C×D)
当给定 dim 时,那么只在给定的维度(dimension)上进行压缩操作。
举个例子:如果 input 的形状为 (A×1×B),squeeze(input, 0)后,返回的tensor不变;squeeze(input, 1)后,返回的tensor将被压缩为 (A×B)
torch.unsqueeze()
torch.spmm
torch.spmm只支持 sparse 在前,dense 在后的矩阵乘法,两个sparse相乘或者dense在前的乘法不支持,当然两个dense矩阵相乘是支持的。
torch.sum
在dim这个维度上,对里面的tesnor 进行加和,如果keepdim=False,返回结果会删去dim这个维度。因为在dim上加和之后,dim=1,所以可以直接删去。
torch.diag
对角矩阵
torch.concat
torch.cat ( (A, B), dim=0)接受一个由两个(或多个)tensor组成的元组,按行拼接,所以两个(多个)tensor的列数要相同。
torch.cat ( (A, B), dim=1)是按列拼接,所以两个tensor的行数要相同。
torch.view
在PyTorch中view函数作用为重构张量的维度,相当于numpy中的resize()的功能,但是用法不太一样;
torch.view(参数a,参数b,…),其中参数a=3,参数b=2决定了将一维的tt1重构成3*2维的张量。
有时候会出现torch.view(-1)或者torch.view(参数a,-1)这种情况。则-1参数是需要估算的。view()函数的功能与reshape类似,用来转换size大小。x = x.view(batchsize, -1)中batchsize指转换后有几行,而-1指在不告诉函数有多少列的情况下,根据原tensor数据和batchsize自动分配列数。
之前对于pytorch的网络编程学习都是大致理解每一层的概念,有些语法语句没有从原理上弄清楚,就比如标题的x = x.view(x.size(0), -1) 。
这句话一般出现在model类的forward函数中,具体位置一般都是在调用分类器之前。分类器是一个简单的nn.Linear()结构,输入输出都是维度为一的值,x = x.view(x.size(0), -1) 这句话的出现就是为了将前面多维度的tensor展平成一维。
torch.permute
permute(dims)
参数dims用矩阵的维数代入,一般默认从0开始。即第0维,第1维等等
也可以理解为,第0块,第1块等等。当然矩阵最少是两维才能使用permute
如是两维,dims分别为是0和1
可以写成permute(0,1)这里不做任何变化,维数与之前相同
如果写成permute(1,0)得到的就是矩阵的转置
如果三维是permute(0,1,2)
0代表共有几块维度:本例中0对应着3块矩阵
1代表每一块中有多少行:本例中1对应着每块有2行
2代表每一块中有多少列:本例中2对应着每块有5列
所以是3块2行5列的三维矩阵