2016-11-07 143 views
1

我有一个张量,它是[100 X 16 X 16]。我想获得张量的对角线元素以获得形状[100 X 16]的张量。我尝试了以下内容:Tensorflow:如何获得多个矩阵的对角线(批处理模式)

#sum_cov[100 X 16 X 16]diagonal_elements预计为[100 X 16]

diagonal_elements = tf.diag_part(sum_cov)

不过,我得到以下错误:

Input must have even rank <= 6, input rank is 3 for 'DiagPart'

可有人请告诉我如何实现这一目标?

+0

看起来像'tf.matrix_diag_part'做你想要的。 –

回答

0

https://www.tensorflow.org/api_docs/python/tf/diag_part https://www.tensorflow.org/api_docs/python/tf/matrix_diag_part

dm0_是正确的。你想要tf.matrix_diag_part

tf.diag_part计算张量对角线,如果输入张量具有这样塑造(D1, ..., Dk, D1, ..., Dk)则输出张量具有形状(D1, ..., Dk)并且使得

tf.diag_part(input)[i1, ..., ik] = input[i1, ..., ik, i1, ..., ik] 

这就是为什么你会得到一个错误。为了使上述先决条件成立,输入张量必须具有均匀的等级。

tf.matrix_diag_part另一方面将输入张量视为一批二维矩阵,并计算每个矩阵的对角线。因此,如果输入了张塑造(I, J, K, ..., M, N),输出张量将有形状(I, J, K, ..., min(M, N)),并须

tf.matrix_diag_part(input)[i, j, k, ..., m] = input[i, j, k, ..., m, m] 

两个功能是等级2张量是相同的,但对于任何高于他们非常不同的东西。