Hi all,
Here is my experiment
input = torch.rand(3,10,6)
#method1
as_matrix = torch.bmm(input, input.contiguous().transpose(2,1))
# method2
one_by_one = []
for i in range(input.size(1)):
query = input[:, i:i+1, :]
temp = torch.bmm(query, input.contiguous().transpose(2,1))
one_by_one.append(temp)
one_by_one = torch.cat(one_by_one, dim=1)
In my understanding, the difference between method1 and method2 is how to interpret input. While method1 consider input as a matrix, method2 consider input as a list of matrix being concatenated together alone the second dimension.
My expectation is the outputs should be exactly the same.
But the fact is they are slightly different. Can some help me understand why they are different? OR, this difference is so small that I do not need to worry about it.
Thanks
as_matrix - one_by_one
# output:
tensor([[[ 0.0000e+00, 0.0000e+00, 5.9605e-08, 0.0000e+00, -1.1921e-07,
0.0000e+00, 5.9605e-08, 0.0000e+00, 0.0000e+00, 0.0000e+00],
[ 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00,
0.0000e+00, -2.3842e-07, 0.0000e+00, 0.0000e+00, 1.1921e-07],
[ 5.9605e-08, 0.0000e+00, 0.0000e+00, 0.0000e+00, 1.1921e-07,
-5.9605e-08, 0.0000e+00, 0.0000e+00, 5.9605e-08, 0.0000e+00],
[ 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, -1.1921e-07,
-5.9605e-08, 0.0000e+00, 1.1921e-07, 0.0000e+00, 0.0000e+00],
[-1.1921e-07, 0.0000e+00, 1.1921e-07, -1.1921e-07, 2.3842e-07,
5.9605e-08, 0.0000e+00, 1.1921e-07, 0.0000e+00, 0.0000e+00],
[ 0.0000e+00, 0.0000e+00, -5.9605e-08, -5.9605e-08, 5.9605e-08,
5.9605e-08, 0.0000e+00, 0.0000e+00, 5.9605e-08, 1.1921e-07],
[ 5.9605e-08, -2.3842e-07, 0.0000e+00, 0.0000e+00, 0.0000e+00,
0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00],
[ 0.0000e+00, 0.0000e+00, 0.0000e+00, 1.1921e-07, 1.1921e-07,
0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00],
[ 0.0000e+00, 0.0000e+00, 5.9605e-08, 0.0000e+00, 0.0000e+00,
5.9605e-08, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00],
[ 0.0000e+00, 1.1921e-07, 0.0000e+00, 0.0000e+00, 0.0000e+00,
1.1921e-07, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00]],
[[ 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00,
5.9605e-08, 0.0000e+00, -1.1921e-07, 0.0000e+00, -1.1921e-07],
[ 0.0000e+00, 2.3842e-07, 0.0000e+00, 0.0000e+00, 5.9605e-08,
1.1921e-07, 0.0000e+00, 0.0000e+00, 2.3842e-07, 0.0000e+00],
[ 0.0000e+00, 0.0000e+00, 0.0000e+00, 1.1921e-07, -5.9605e-08,
1.1921e-07, -1.1921e-07, 0.0000e+00, 0.0000e+00, 0.0000e+00],
[ 0.0000e+00, 0.0000e+00, 1.1921e-07, 0.0000e+00, 0.0000e+00,
1.1921e-07, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00],
[ 0.0000e+00, 5.9605e-08, -5.9605e-08, 0.0000e+00, -5.9605e-08,
0.0000e+00, 0.0000e+00, -1.1921e-07, 0.0000e+00, 0.0000e+00],
[ 5.9605e-08, 1.1921e-07, 1.1921e-07, 1.1921e-07, 0.0000e+00,
0.0000e+00, -1.1921e-07, -1.1921e-07, 1.1921e-07, 1.1921e-07],
[ 0.0000e+00, 0.0000e+00, -1.1921e-07, 0.0000e+00, 0.0000e+00,
-1.1921e-07, 2.3842e-07, -2.3842e-07, 0.0000e+00, 0.0000e+00],
[-1.1921e-07, 0.0000e+00, 0.0000e+00, 0.0000e+00, -1.1921e-07,
-1.1921e-07, -2.3842e-07, 0.0000e+00, 2.3842e-07, 0.0000e+00],
[ 0.0000e+00, 2.3842e-07, 0.0000e+00, 0.0000e+00, 0.0000e+00,
1.1921e-07, 0.0000e+00, 2.3842e-07, 0.0000e+00, 0.0000e+00],
[-1.1921e-07, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00,
1.1921e-07, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00]],
[[-2.3842e-07, 0.0000e+00, -2.3842e-07, 2.3842e-07, -1.1921e-07,
0.0000e+00, 1.1921e-07, 0.0000e+00, -1.1921e-07, 2.3842e-07],
[ 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00,
0.0000e+00, 0.0000e+00, 0.0000e+00, -1.1921e-07, 0.0000e+00],
[-2.3842e-07, 0.0000e+00, 2.3842e-07, 0.0000e+00, 0.0000e+00,
0.0000e+00, 0.0000e+00, 2.3842e-07, 0.0000e+00, 0.0000e+00],
[ 2.3842e-07, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00,
-1.1921e-07, 0.0000e+00, 1.1921e-07, 0.0000e+00, 0.0000e+00],
[-1.1921e-07, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00,
0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00],
[ 0.0000e+00, 0.0000e+00, 0.0000e+00, -1.1921e-07, 0.0000e+00,
0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 1.1921e-07],
[ 1.1921e-07, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00,
0.0000e+00, -1.1921e-07, 1.1921e-07, 0.0000e+00, -1.1921e-07],
[ 0.0000e+00, 0.0000e+00, 2.3842e-07, 1.1921e-07, 0.0000e+00,
0.0000e+00, 1.1921e-07, 0.0000e+00, 1.1921e-07, -1.1921e-07],
[-1.1921e-07, -1.1921e-07, 0.0000e+00, 0.0000e+00, 0.0000e+00,
0.0000e+00, 0.0000e+00, 1.1921e-07, 1.1921e-07, 5.9605e-08],
[ 2.3842e-07, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00,
1.1921e-07, -1.1921e-07, -1.1921e-07, 5.9605e-08, 1.1921e-07]]])