【Pytorch】關於torch.matmul和torch.bmm的輸出tensor數值不一致問題


https://blog.csdn.net/laox1ao/article/details/79159303

 

發現
對於torch.matmul和torch.bmm,都能實現對於batch的矩陣乘法:

a = torch.rand((2,3,10))
b = torch.rand((2,2,10))
### matmal()
res1 = torch.matmul(a,b.transpose(1,2))
print res1
"""
...
[torch.FloatTensor of size 2x3x2]
"""
### bmm()
res2 = torch.bmm(a,b.transpose(1,2))
print res2
"""
...
[torch.FloatTensor of size 2x3x2]
"""
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
從打印出來的幾位數字來看,嗯,是一樣的,但是在用等式(或者torch.eq())檢查是卻發現了問題,竟然有很多不一樣的元素

print torch.eq(res1,res2)
"""
(0 ,.,.) =
1 0
1 1
1 1

(1 ,.,.) =
0 1
1 1
1 1
[torch.ByteTensor of size 2x3x2]
"""
1
2
3
4
5
6
7
8
9
10
11
12
13
將一樣的數值在ipython直接輸出(print會截斷位數)

>>>res1[0,0,0]
2.229752540588379
>>>res2[0,0,0]
2.229752540588379
1
2
3
4
再來看看不一樣的

>>>res1[0,0,1]
3.035151720046997
>>>res2[0,0,1]
3.035151481628418
1
2
3
4
可以看到從小數點后位7位開始兩個輸出值出現了差異!

結論
所以說在tensor的同樣操作下,出現不一致結果(精度上)的可能性很大,在做相等條件判斷時需要注意,即使同樣的輸入同樣的操作可能出現不一樣的結果。
之后又嘗試對於a,b的位置進行交換,竟然發現即使是同一個函數操作,如matmal(),matmul(a,b.transpose(1,2))和matmul(b,a.transpose(1,2)).transpose(1,2)結果也存在不一樣的元素。
---------------------
版權聲明:本文為CSDN博主「Laox1ao」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/laox1ao/article/details/79159303


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM