[英]Tensor contraction in tensorflow
我有一個形狀為(?,4)
的張量weights
和一個形狀為(?,4,1024)
的張量embeddings
物。
我想通過根據對應的weights
每一行embeddings
中的4個張量的加權平均值來收縮張量,最終產生形狀為(?,1024)
的張量output
。
我怎樣才能做到這一點? 我嘗試使用output = tf.tensordot(weights, embeddings, axes = [1,1])
但是卻產生了形狀為(?,?,1024)
的張量。
您可以這樣做:
import tensorflow as tf
weights = tf.placeholder(tf.float32, [None, 4])
embeddings = tf.placeholder(tf.float32, [None, 4, 1024])
output = tf.einsum('ij,ijk->ik', weights, embeddings)
您可以通過矩陣乘積表達相同的內容,不確定性能是否會有所不同:
output = tf.squeeze(tf.expand_dims(weights, 1) @ embeddings, 1)
您也可以乘以或減少,盡管原則上由於具有中間張量而使性能變差。
output = tf.reduce_sum(tf.expand_dims(weights, 2) * embeddings, axis=1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.