Python 向量的torch.mean(数据,0)和torch.mean(数据)的不同行为

Python 向量的torch.mean(数据,0)和torch.mean(数据)的不同行为,python,mean,pytorch,torch,mnist,Python,Mean,Pytorch,Torch,Mnist,我惊讶地发现torch.mean(数据,0)和torch.mean(数据)的行为不同,其中“数据”是一维张量(向量,不是矩阵或其他东西): 执行后的结果: tensor(33.3184) tensor(33.4961) 谁能猜出发生了什么事?我假设结果应该是一样的。一个例子应该可以帮助你澄清你的疑问 假设我们有data=torch.Tensor([1,2,3,4],[1,2,3,4]) 现在,当您执行torch.mean(data)时,它将对数据张量中的所有元素求和,然后除以该张量中的元素数,

我惊讶地发现torch.mean(数据,0)和torch.mean(数据)的行为不同,其中“数据”是一维张量(向量,不是矩阵或其他东西):

执行后的结果:

tensor(33.3184)
tensor(33.4961)

谁能猜出发生了什么事?我假设结果应该是一样的。

一个例子应该可以帮助你澄清你的疑问

假设我们有
data=torch.Tensor([1,2,3,4],[1,2,3,4])

现在,当您执行
torch.mean(data)
时,它将对数据张量中的所有元素求和,然后除以该张量中的元素数,得到
2.5

对于您的
torch.mean(data,0)
操作,这将沿水平方向执行平均值,这意味着它将取第一行的第一个元素,即1,取第二行的第一个元素,即2,求和并除以2。这样有助于数据数组的可视化

[1, 2, 3, 4]
[1, 2, 3, 4]
最后的结果将是
[1,2,3,4]
的张量,如果您知道我们是如何得到这个张量的,那么您已经理解了其中的区别


希望可以澄清,如果您有问题请告诉我

您是否查看了实际数据?你能用其他(简单的合成)数据复制这个吗?@THN在通过
view(-1)
对MNIST进行重塑后,我得到了一个0到255个数字的列表。此外,如果我们尝试通过
numpy.mean(data)
numpy.mean(data,axis=0)
(而不是
torch.mean
)计算平均值,我们将得到相同的结果。也许你应该在github上打开一个问题,听起来像是一个bug。可能与低精度浮点计算中的优化有关,但不确定。在我的示例中,数据是一维张量,而不是像您的答案中那样的矩阵,即向量:
data=[1,2,3,4,5]
。它被
视图(-1)
重新塑造。它有一个轴和
火炬。平均值(数据)
必须等于
火炬。平均值(数据,0)
。为什么在我的例子中,
torch.mean(数据)
torch.mean(数据,0)
得到了不同的结果?
[1, 2, 3, 4]
[1, 2, 3, 4]