提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
对一些reduce操作的理解
以torch.max为例
-
当执行torch.max操作后,张量的维度会被降维
a = torch.tensor([1,2,3,4]) print(a.shape) max_a = torch.max(a, dim=-1) print(max_a) print(max_a[0].shape) print(max_a[1].shape) >>> # 大小为(4,)的张量通过torch.max操作后变为了标量 torch.Size([4]) torch.return_types.max( values=tensor(4), indices=tensor(3)) torch.Size([]) torch.Size([]) b = torch.tensor([[1,2,3,4],[1,2,3,4]]) print(b.shape) max_b = torch.max(b,dim=-1) print(max_b) print(max_b[0].shape) print(max_b[1].shape) >>> # 大小为(2,4)的张量通过torch.max操作后变为了维度为(2,)的张量 torch.Size([2, 4]) torch.return_types.max( values=tensor([4, 4]), indices=tensor([3, 3])) torch.Size([2]) torch.Size([2]) c = torch.tensor([[[1,2,3,4],[1,2,3,4]],[[1,2,3,4],[1,2,3,4]]]) print(c) print(c.shape) max_c = torch.max(c,dim=-1) print(max_c) print(max_c[0].shape) print(max_c[1].shape) >>> # 大小为(2,2,4)的张量变为了(2,2)的张量 tensor([[[1, 2, 3, 4], [1, 2, 3, 4]], [[1, 2, 3, 4], [1, 2, 3, 4]]]) torch.Size([2, 2, 4]) torch.return_types.max( values=tensor([[4, 4], [4, 4]]), indices=tensor([[3, 3], [3, 3]])) torch.Size([2, 2]) torch.Size([2, 2])
-
对于维度为(4,)的张量来说,取出其中的最大值即从总共为1行的4个数字中取一个最大值,因此最后结果只有一个数字,因此是一个标量;
-
对于维度为(2,4)的张量来说,是从总共为2行的每行有4个数字中取一个最大值,因此最后每行有一个数字,将这两行的数字结果合并起来就是一个大小为(2,)的张量;
-
同理,对于维度为(2,2,4)的张量来说,相当于有2个2行每行有4个数字的张量,从每个2行每行有4个数字的张量中取最大值,即和上一个维度为(2,4)的结果相同,得到大小为(2,)的张量,由于有2个2行每行有4个数字的张量,因此最终得到的大小为(2,2)。