1
最初に私は別の質問を見つけましたNo broadcasting for tf.matmul in TensorFlow
しかし、その質問は私の問題を解決しません。4D 3Dテンソルのテンソルフローのtf.matmulの放送がありません
私の問題は、行列のバッチがベクトルの別のバッチを乗算することです。
x=tf.placeholder(tf.float32,shape=[10,1000,3,4])
y=tf.placeholder(tf.float32,shape=[1000,4])
xはmatrices.Thereのバッチで10×1000 matrices.Eachマトリックス形状であるれる[3,4]
yはvectors.Thereのバッチ1000 vectors.Eachベクトルは形状であります[4]
xのdim 1とyのdim 0は同じです。 tf.matmul放送をサポートしていた場合、私は
y=tf.reshape(y,[1,1000,4,1])
result=tf.matmul(x,y)
result=tf.reshape(result,[10,1000,3])
を書くことができしかし、私は、私は
上で参照し、質問のアプローチを使用している場合はを放送tf.matmulサポートしていません
(ここでは1000)
x=tf.reshape(x,[10*1000*3,4])
y=tf.transpose(y,perm=[1,0]) #[4,1000]
result=tf.matmul(x,y)
result=tf.reshape(result,[10,1000,3,1000])
結果は形状[10,1000,3,1000]であり、[10,1000,3]ではありません。
冗長性を取り除く方法がわかりません1000
ブロードキャストをサポートするtf.matmulと同じ結果を得るにはどうすればよいですか?