tensor.view 被用于改变张量的维度。
>>> x = torch.randn(4, 4)
>>> x.size()
torch.Size([4, 4])
>>> y = x.view(16)
>>> y.size()
torch.Size([16])
>>> z = x.view(-1, 8) # the size -1 is inferred from other dimensions
>>> z.size()
torch.Size([2, 8])
>>> a = torch.randn(1, 2, 3, 4)
>>> a.size()
torch.Size([1, 2, 3, 4])
>>> c = a.view(1, 3, 2, 4) # Does not change tensor layout in memory
>>> c.size()
torch.Size([1, 3, 2, 4])
torch.permute 被用来重新排序张量的维度
其中,2 是第 0 维,3 是第 1 维,5 是第 2 维。
根据给定的维度顺序 (2, 0, 1) 进行调整,所以新的张量维度为 5x2x3
>>> x = torch.randn(2, 3, 5)
>>> x.size()
torch.Size([2, 3, 5])
>>> torch.permute(x, (2, 0, 1)).size()
torch.Size([5, 2, 3])
torch.matmul 被用来计算两个张量间的矩阵乘法
>>> # vector x vector
>>> tensor1 = torch.randn(3)
>>> tensor2 = torch.randn(3)
>>> torch.matmul(tensor1, tensor2).size()
torch.Size([])
>>> # matrix x vector
>>> tensor1 = torch.randn(3, 4)
>>> tensor2 = torch.randn(4)
>>> torch.matmul(tensor1, tensor2).size()
torch.Size([3])
如果两个参数至少是一维的,并且至少有一个参数是N维的(其中N>2),则返回一个批处理矩阵乘法。如果第一个参数是一维的,那么在其维数前加上1,然后将其删除。如果第二个参数是一维的,则为了批量矩阵的目的,在其维度上附加一个1,并在之后删除。
>>> # batched matrix x broadcasted vector
>>> tensor1 = torch.randn(10, 3, 4)
>>> tensor2 = torch.randn(4)
>>> torch.matmul(tensor1, tensor2).size()
torch.Size([10, 3])
批量维度是广播的。例如,如果输入是(j×1×n×n)张量,另一个是(k×n×n)张量,则输出将是(j×k×n×n)张量。
>>> # batched matrix x batched matrix
>>> tensor1 = torch.randn(10, 3, 4)
>>> tensor2 = torch.randn(10, 4, 5)
>>> torch.matmul(tensor1, tensor2).size()
torch.Size([10, 3, 5])
例如,如果输入是(j×1×n×m)张量,而另一个是(k×m×p)张量,则即使最后两个维度(即矩阵维度)不同,这些输入对广播也是有效的。out将是一个(j×k×n×p)张量。
>>> # batched matrix x broadcasted matrix
>>> tensor1 = torch.randn(10, 3, 4)
>>> tensor2 = torch.randn(4, 5)
>>> torch.matmul(tensor1, tensor2).size()
torch.Size([10, 3, 5])
pytorch 文档