0

我有一个二维张量。我想将该 2D 张量中的每个向量和tf.tensordot(vector, matrix, axes=1)3D 张量中的矩阵获取,该矩阵在 3D 张量中与向量在 2D 张量中具有相同的索引。

本质上,我希望得到与这个 for 循环相同的结果,但是通过执行 tensorflow 矩阵运算而不是 numpy 和循环:

tensor2d = np.array([[1.,1.,1.,0.,0.],
                 [1.,1.,0.,0.,0.]],
                np.float32)

tensor3d = np.array([
    [
        [1., 2., 3.],
        [2., 2., 3.],
        [3., 2., 3.],
        [4., 2., 3.],
        [5., 2., 3.],
    ],
    [
        [1., 2., 3.],
        [2., 2., 3.],
        [3., 2., 3.],
        [4., 2., 3.],
        [5., 2., 3.],
    ]
], np.float32)

results = []

for i in range(len(tensor2d)):
    results.append(np.tensordot(tensor2d[i], tensor3d[i], axes=1))

它的输出应该是一个看起来像这样的矩阵(尽管类型会有所不同):

[array([6., 6., 9.], dtype=float32), array([3., 4., 6.], dtype=float32)]

4

1 回答 1

0

好的,自己找到的答案归结为使用tf.math.multiply和弄乱转置,直到结果是所需的形状。如果有人能在某个时候提出一个更有原则的答案,那就太好了,但就目前而言,这行得通:

result = tf.transpose(tf.math.multiply(tensor2d, tensor3d.transpose([2,0,1])), [1,2,0])
于 2019-07-25T17:45:26.817 回答