Python 向量的torch.mean(数据,0)和torch.mean(数据)的不同行为
我惊讶地发现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)时,它将对数据张量中的所有元素求和,然后除以该张量中的元素数,
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]