首页 > 解决方案 > 使用两个张量向量创建 N x M 张量矩阵,并为每个 (n,m) 对应用一个函数

问题描述

我有两个形状的张量 X 和 Z,(100,)我想创建一个张量 X x Z,这将导致形状为(100, 100).

对于这个矩阵中的每个对元素,我想应用一些我已经定义的函数,即 fn(x,z) 用于矩阵中的每个可能组合。

我是 TensorFlow 的新手,我习惯于按顺序思考,在处理 numpy 数组时,每个向量上有两个 for 循环。

我怎样才能在 TensorFlow 中做到这一点?非常感谢。

标签: pythontensorflow

解决方案


对于一般问题

您可以创建一个自定义层来解决这个问题。

import tensorflow as tf
from tensorflow.keras.layers import Layer


def fn(x, y):
    return x + y


class PairMatrix(Layer):
    def __init__(self, func=None):
        super(PairMatrix, self).__init__()
        self.func = func

    def call(self, inputs, **kwargs):
        X, Y = tf.meshgrid(inputs[0], inputs[1])
        return self.func(X, Y)


x = tf.constant([1, 2, 3])
y = tf.constant([1, 2, 3])

z = PairMatrix(func=fn).apply([x, y])

应该创建一个将函数作为参数的层。调用时,该函数将应用于输入 x 和 y 的构造网格。

在上面的简单测试用例中,产生的输出是:

z = tf.Tensor([[2 3 4]
               [3 4 5]
               [4 5 6]], shape=(3, 3), dtype=int32)

关于你的评论

如果只是您感兴趣的协方差,您可以使用tfp.stats.covariance


推荐阅读