あなたが意図したとおりに放送していないと思います。それは実際に両方の方向を放送しています。あなたの例を変更して意味することを教えてください。
a = tf.ones([64, 10, 1, 100])
b = tf.ones([128, 100])
print((a+b).shape) # prints "(64, 10, 128, 100)"
これから、最後の次元を最初に一致させることでブロードキャストすることがわかります。 b
の最初のディメンションのサイズに一致するように3番目のディメンションを含めると暗黙のうちにa
がタイルされ、次に暗黙的にシングルトンが追加されて、が表示されます。の最初の2つのディメンションにはb
があります。
私があなたがすると思ったのは、の2番目の次元に暗黙のうちにb
を埋め込むことでした。あなたはこの形状に合わせて2つのシングルトン次元を追加するために、あなたのBに二回tf.expand_dims()
を使用することができます
a = tf.ones([64, 10, 1, 100])
b = tf.ones([64, 1, 1, 100])
print((a+b).shape) # prints "(64, 10, 1, 100)"
:これを行うには、あなたは異なる形状であることをb
を必要としています。