K.dot和K.batch_dot

K.dot(A,B)
A.shape(-1)和B.shape(-2)必須一樣,其餘沒有限制
K.batch_dot(A,B)
A.shape(-1)和B.shape(-2)必須一樣,A.shape(-2)和B.shape(-1)可以不一樣,shape(-2)以前的必須完全一樣
具體這兩個怎麼計算呢
假設:
a.shape:(1, 2, 4) b.shape:(8, 7, 4, 5)
c=K.dot(a,b) c.shape:(1,2,8,7,5)
如果要計算Ci,j,k,m,nC_{i,j,k,m,n}則先取出A[i]這個矩陣,再取出B[k][m]這個矩陣,兩個相乘,得到一個矩陣D(矩陣的維度是 2×5,爲什麼是2×5矩陣,因爲一個2×4的矩陣和一個4×5的矩陣相乘) 則 Ci,j,k,m,nC_{i,j,k,m,n}=Dj,nD_{j,n}
另一例:
a = K.ones((9, 8, 7, 4, 2))
b = K.ones((9, 8, 7, 2, 5))
c = K.batch_dot(a, b)
c.shape (9, 8, 7, 4, 5)
如果要計算Ci,j,k,m,nC_{i,j,k,m,n}則先取出A[i][j][k]這個矩陣,再取出B[i][j][k]這個矩陣,兩個相乘,得到一個矩陣D(矩陣的維度是 4×5) 則 Ci,j,k,m,nC_{i,j,k,m,n}=Dm,nD_{m,n}
總結要點:
取出兩個矩陣(矩陣顯然是二維的),相乘,然後將這個矩陣對應的放到該放的位置上
具體參考:https://christopher5106.github.io/deep/learning/2018/10/28/understand-batch-matrix-multiplication.html
(這篇講的很好)
python中np.multiply()、np.dot()和星號()三種乘法運算的區別:
https://www.cnblogs.com/hezhiyao/p/8649231.html
(numpy矩陣用*就默認是矩陣相乘,但是array相乘不能這麼用,得用方法.dot())
TensorFlow - tf.multiply和tf.matmul 區別:
https://blog.csdn.net/flyfish1986/article/details/79141763/
注意tf.multiply(a,b)應該是隻允許a、b最後一維可以不同,但是此時必須有一個維度是1,a
b就相當於tf.multiply(a,b)
tf.matmul只可以a的倒數第一維和b的倒數第二維不一樣,別的都必須一樣(當len(shape(a或b))>2,表示成批的矩陣)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章