MLSlayer
(mlslayer)
1
For example
>>> x
tensor([[[[ 1., 3.],
[ 4., 6.]],
[[-1., -3.],
[-4., -7.]]]])
>>> x.mean([3, 0, 1])
tensor([ 0.0000, -0.2500])
>>> x.mean([3, 0])
tensor([[ 2.0000, 5.0000],
[-2.0000, -5.5000]])
>>> x.mean([3, 0]).mean([1])
tensor([ 3.5000, -3.7500])
I had believed that, doing mean([3, 0, 1]) is equivalent of doing x.mean([3, 0]).mean([1])
if we do,
x.mean(3).mean(0).mean(0)
then it would give same result
basically,
if we have tensor
x = torch.randn(a, b, c, d)
and we apply
torch.mean(x, dim=0)
then its shape would be
torch.Size([b, c, d])
so here, when we do,
x = torch.tensor([[[[ 1., 3.],
[ 4., 6.]],
[[-1., -3.],
[-4., -7.]]]])
x.shape
torch.Size([1, 2, 2, 2])
let us assume a=1, b=2, c=2, d=2
x.mean([3, 0, 1])
the resulting shape would be,
torch.Size([c])
while if we do,
x.mean([3, 0]).mean([1])
then after
x.mean([3, 0])
shape would be
torch.Size([b, c]) # [2, 2]
and when we do
x.mean([3, 0]).mean([1])
means shape would be
torch.Size([b])
so, we get different results, if we did
x.mean([3, 0]).mean(0)
then results would be same.
1 Like
MLSlayer
(mlslayer)
3
This is exactly what I was looking for!