pytorch 之 view、permute、matmul 用法

1. tensor.view 用法

tensor.view 被用于改变张量的维度。

  • 对 4x4 的张量进行维度变换
>>> x = torch.randn(4, 4)
>>> x.size()
torch.Size([4, 4])
  • view 中指定张量维度
    将 4x4 的张量变成维度为 16 的张量
>>> y = x.view(16)
>>> y.size()
torch.Size([16])
  • view 中指定一个维度,另一个维度自动推算
    将 4x4 的张量变成维度为 2x8 的张量,4x4/8 = 2,推断出维度为 2x8
>>> z = x.view(-1, 8)  # the size -1 is inferred from other dimensions
>>> z.size()
torch.Size([2, 8])
  • view 指定维度无效的情况
>>> 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])

2. torch.permute 用法

torch.permute 被用来重新排序张量的维度

  • 调整维度为 2x3x5 的张量顺序

其中,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])

3. torch.matmul 用法

torch.matmul 被用来计算两个张量间的矩阵乘法

  • 如果两个张量都是一维的,则返回点积(标量)
>>> # vector x vector
>>> tensor1 = torch.randn(3)
>>> tensor2 = torch.randn(3)
>>> torch.matmul(tensor1, tensor2).size()
torch.Size([])
  • 如果两个参数都是二维的,则返回矩阵积
  • 如果第一个参数是一维的,第二个参数是二维的,那么在其维数前加上1。矩阵相乘后,删除预先指定的维度。如果第一个参数是二维的,第二个参数是一维的,则返回矩阵向量积。
>>> # 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 文档

你可能感兴趣的:(深度学习数学基础,pytorch,深度学习,python)