Misalkan saya mempunyai himpunan vektor A
dan saya ingin mengalikan setiap vektor di A
dengan tensor T
hingga akhirnya mendapatkan tensor y
yang setiap matriks irisannya adalah hasil perkalian vektor v
di A
dengan T
:
Jika X
hanya terdiri dari satu vektor, maka kode berikut berfungsi (berkat jawaban di fungsi matmul untuk vektor dengan perkalian tensor di tensorflow):
tf.reduce_sum(tf.expand_dims(v,2)*T,1)
Namun jika X
terdiri dari beberapa vektor, bagaimana kode perkaliannya?
Misalnya, saya memiliki nilai berikut untuk A
(dengan 2
vektor) dan T
:
A = tf.constant([1,2,3,4], shape=[2,2], dtype=tf.float32) #v1 =[1,2], v2=[3,4]
T = tf.constant([1,2,3,4,5,6,7,8], shape=[2,2,2], dtype=tf.float32)
Saya ingin mendapatkan hasil berikut dengan mengalikan A
ke T
:
[[[ 7. 10.]
[19. 22.]]
[[15. 22.]
[43. 50.]]]
Penerapan untuk pertanyaan ini adalah penurunan gradien batch dalam regresi linier y = AX +b
, di mana saya memiliki sekumpulan vektor tetapi alih-alih melatih matriks bobot X
, saya ingin melatih tensor T
, sehingga keluaran y
akan menjadi tensor di yang mana setiap matriks pada tensor merupakan keluaran perkalian vektor masukan dengan T
.
Perhatikan bahwa, Secara umum ketika kita mengalikan vektor v
berdimensi 1*n
dengan tensor T
berdimensi m*n*k
, kita berharap mendapatkan matriks/tensor berdimensi m*k/m*1*k
. Artinya tensor kita memiliki m
irisan matriks dengan dimensi n*k
, dan v
dikalikan dengan masing-masing matriks dan vektor-vektor yang dihasilkan ditumpuk menjadi satu.