web-dev-qa-db-ja.com

TensorFlowでの行列とベクトルの効率的な要素ごとの乗算

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

32

これを行う最も簡単なコードは、 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_)を使用して同じ操作を実行することもできます。

41
mrry