10

TensorFlow で正方行列の対角線を抽出する方法はありますか? つまり、次のような行列の場合:

[
 [0, 1, 2],
 [3, 4, 5],
 [6, 7, 8]
]

要素を取得したい:[0, 4, 8]

numpy では、これはnp.diag経由で非常に簡単です:

TensorFlow にはdiag functionがありますが、対角の引数で指定された要素を持つ新しい行列を形成するだけで、これは私が望むものではありません。

ストライドを介してこれを行う方法を想像できました...しかし、TensorFlow のテンソルのストライドは見られません。

4

6 に答える 6

10

tensorflow 0.8 を使用すると、対角要素を抽出できます(ドキュメントtf.diag_part()を参照)

アップデート

for tensorflow >= r1.12 そのtf.linalg.tensor_diag_part(ドキュメントを参照)

于 2016-04-20T12:57:54.423 に答える
0

操作を使用しgatherます。

x = tensorflow.Variable([[1,2,3],[4,5,6],[7,8,9]])
x_flat = tf.reshape(x, [-1])  # flatten the matrix
x_diag = tf.gather(x, [0, 3, 6])
于 2016-01-05T05:44:41.157 に答える
0

コンテキストに応じて、マスクは行列の対角要素を「キャンセル」するための優れた方法である可能性があります。

mask = tf.diag(tf.ones([n]))
y = tf.mul(mask,y)
cost = -tf.reduce_sum(y)
于 2016-01-16T20:17:48.563 に答える