Tensorflow:如何获取多个矩阵的对角线(批处理模式)

时间:2016-11-07 15:51:50

标签: tensorflow

我的张量为let boundingBox = createdShape.frame //=SKShapeNode for x in stride(from: Int(boundingBox.minX), to: Int(boundingBox.maxX), by: 10) { // TODO: Use x here. } 。我想得到这个张量的对角元素得到一个形状张量[100 X 16 X 16]。我尝试了以下方法:

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

[100 X 16]

但是,我收到以下错误:

diagonal_elements = tf.diag_part(sum_cov)

有人可以告诉我如何实现这个目标吗?

1 个答案:

答案 0 :(得分: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级张量中是相同的,但是对于任何高于它的东西,它们都是非常不同的动物。