พิจารณาว่าฉันมีเซตของเวกเตอร์ A
และฉันต้องการคูณเวกเตอร์แต่ละตัวใน A
ด้วยเทนเซอร์ T
เพื่อให้ในที่สุดมีเทนเซอร์ y
โดยที่เมทริกซ์แต่ละชิ้นเป็นผลมาจากการคูณเวกเตอร์ v
ใน A
ด้วย T
:
หาก X
ประกอบด้วยเวกเตอร์เพียงตัวเดียว โค้ดต่อไปนี้ก็ใช้งานได้ (ขอบคุณคำตอบใน ฟังก์ชัน matmul สำหรับเวกเตอร์ที่มีการคูณเทนเซอร์ในเทนเซอร์โฟลว์):
tf.reduce_sum(tf.expand_dims(v,2)*T,1)
แต่ถ้า X
ประกอบด้วยเวกเตอร์หลายตัว รหัสสำหรับการคูณจะเป็นอย่างไร
ตัวอย่างเช่น ฉันมีค่าต่อไปนี้สำหรับ A
(พร้อมเวกเตอร์ 2
) และ 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)
ฉันต้องการรับผลลัพธ์ต่อไปนี้โดยการคูณ A
ถึง T
:
[[[ 7. 10.]
[19. 22.]]
[[15. 22.]
[43. 50.]]]
การประยุกต์ใช้กับคำถามนี้คือ การไล่ระดับแบทช์ในการถดถอยเชิงเส้น y = AX +b
ซึ่งฉันมีเซตของเวกเตอร์ แต่แทนที่จะฝึกเมทริกซ์น้ำหนัก X
ฉันต้องการฝึกเทนเซอร์ T
ดังนั้นเอาต์พุต y
จะเป็นเทนเซอร์ใน ซึ่งแต่ละเมทริกซ์ในเทนเซอร์เป็นเอาท์พุตของการคูณเวกเตอร์อินพุตด้วย T
โปรดทราบว่า โดยทั่วไป เมื่อเราคูณเวกเตอร์ v
ของมิติ 1*n
ด้วยเทนเซอร์ T
ของมิติ m*n*k
เราคาดว่าจะได้เมทริกซ์/เทนเซอร์ของมิติ m*k/m*1*k
ซึ่งหมายความว่าเทนเซอร์ของเรามีเมทริกซ์ m
ส่วนที่มีมิติ n*k
และ v
คูณด้วยแต่ละเมทริกซ์ และเวกเตอร์ที่ได้จะซ้อนกัน