>>> b
tensor([[ 6, 7, 12, 7, 8],
[ 0, 1, 6, 1, 2],
[ 0, 1, 6, 1, 2],
[ 2, 3, 8, 3, 4],
[ 2, 3, 8, 3, 4],
[ 2, 3, 8, 3, 4],
[10, 11, 16, 11, 12],
[-1, 0, 5, 0, 1],
[-2, -1, 4, -1, 0],
[ 2, 3, 8, 3, 4],
[ 1, 2, 7, 2, 3],
[ 1, 2, 7, 2, 3],
[ 2, 3, 8, 3, 4],
[ 5, 6, 11, 6, 7],
[-2, -1, 4, -1, 0],
[-3, -2, 3, -2, -1],
[-5, -4, 1, -4, -3],
[ 1, 2, 7, 2, 3],
[12, 13, 18, 13, 14],
[-3, -2, 3, -2, -1],
[ 2, 3, 8, 3, 4],
[ 3, 4, 9, 4, 5],
[10, 11, 16, 11, 12],
[-6, -5, 0, -5, -4],
[ 9, 10, 15, 10, 11],
[12, 13, 18, 13, 14],
[-3, -2, 3, -2, -1],
[-2, -1, 4, -1, 0],
[-4, -3, 2, -3, -2],
[-1, 0, 5, 0, 1],
[ 2, 3, 8, 3, 4],
[ 4, 5, 10, 5, 6],
[-1, 0, 5, 0, 1],
[ 5, 6, 11, 6, 7],
[ 7, 8, 13, 8, 9],
[ 3, 4, 9, 4, 5],
[ 2, 3, 8, 3, 4],
[ 4, 5, 10, 5, 6],
[-4, -3, 2, -3, -2],
[ 2, 3, 8, 3, 4],
[-1, 0, 5, 0, 1],
[ 2, 3, 8, 3, 4],
[ 4, 5, 10, 5, 6],
[ 9, 10, 15, 10, 11],
[-1, 0, 5, 0, 1],
[-4, -3, 2, -3, -2],
[ 0, 1, 6, 1, 2],
[ 4, 5, 10, 5, 6],
[ 6, 7, 12, 7, 8],
[-2, -1, 4, -1, 0]])
>>> torch.mode(b, 0)
torch.return_types.mode(
values=tensor([2, 3, 8, 3, 4]),
indices=tensor([20, 20, 20, 20, 20]))
我不知道为什么指数都等于20
详细的 Torch .模式描述如下https://pytorch.org/docs/stable/generated/torch.mode.html#torch.mode
torch.mode(input,dim=- 1,keepdim=False,*,out=None)返回一个命名元组(values,indices),其中values是给定维度dim中输入Tensor的每一行的模式值,即在该行中最常出现的值,indices是找到的每个模式值的索引位置。
默认情况下,dim是输入Tensor的最后一个维度。
如果keepdim为True,则输出Tensor的大小与输入Tensor的大小相同,但维度dim中的Tensor大小为1。否则,dim会被压缩(请参阅torch.squeeze()),导致输出Tensor的维度比输入Tensor少1。
1条答案
按热度按时间wbrvyc0a1#
这是因为Tensor
b
的方式。行[2, 3, 8, 3, 4]
重复很多,因此在每列中,模式分别为[2, 3, 8, 3, 4]
,并且更重要的是,模式索引将精确地相等,因为模式一起出现;如果查看索引为20的行(即,第21行),则它正好是[2, 3, 8, 3, 4]
。我假设您构建了与
torch.mode
中的示例类似的b
,我认为这是一个糟糕的示例选择,因为它会导致像您所遇到的那样的混乱。相反,请考虑以下事项:
在上面的例子中,
b
在每一列都有不同的模式,分别是[0, 2, 0, 0, 0, 0, 2]
,torch.mode
返回的索引是[1, 3, 4, 4, 2, 4, 4]
,这是有意义的,因为例如,在第一列中,0是最常见的元素,索引1处有一个0。类似地,在第二列中,2是最常见的元素,在索引3处有一个2。这对所有列都是成立的。如果你想要行的模式,你可以执行torch.mode(b, 1)
。