2Dテンソル(行列)を(要素ごとに)乗算する最も効率的な方法は次のとおりです。
x11 x12 .. x1N
...
xM1 xM2 .. xMN
垂直ベクトルによる:
w1
...
wN
新しい行列を取得するには:
x11*w1 x12*w2 ... x1N*wN
...
xM1*w1 xM2*w2 ... xMN*wN
コンテキストを提供するために、並列処理可能なバッチ内のM
データサンプルがあり、各N
要素サンプルに、重みw
を格納する必要があります。最終的に各行の最大のXij*wj
を選択する変数i
。
これを行う最も簡単なコードは、 tf.multiply()
のブロードキャスト動作に依存します*、これは numpyのブロードキャスト動作 に基づいています:
_x = tf.constant(5.0, shape=[5, 6])
w = tf.constant([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])
xw = tf.multiply(x, w)
max_in_rows = tf.reduce_max(xw, 1)
sess = tf.Session()
print sess.run(xw)
# ==> [[0.0, 5.0, 10.0, 15.0, 20.0, 25.0],
# [0.0, 5.0, 10.0, 15.0, 20.0, 25.0],
# [0.0, 5.0, 10.0, 15.0, 20.0, 25.0],
# [0.0, 5.0, 10.0, 15.0, 20.0, 25.0],
# [0.0, 5.0, 10.0, 15.0, 20.0, 25.0]]
print sess.run(max_in_rows)
# ==> [25.0, 25.0, 25.0, 25.0, 25.0]
_
* TensorFlowの古いバージョンでは、tf.multiply()
はtf.mul()
と呼ばれていました。 _*
_演算子(つまり_xw = x * w
_)を使用して同じ操作を実行することもできます。