计算矩阵序列中的成对距离

时间:2019-05-10 20:57:27

标签: python tensorflow

我正在建立一个递归神经网络,其中有一个时间序列的特征向量(N x D),其中N列中的每一列都对应一个“事件”。我得到了另一个N x 3矩阵中事件坐标的演变。我不仅要为网络提供(N x D + 3)矩阵,还想构建一个事件图,以便同时利用图卷积。因此,如果我有一个长度为t的时间序列,那么我将处理维度为tx N x D以及tx N x 3的输入,因为单个“事件”的特征和坐标都会发生变化。 / p>

对于单个事件分类,我已经构建了一种方法来构造N个事件的坐标的密集邻接矩阵。这涉及到计算N个坐标中每个坐标的成对距离并应用高斯核。

更准确地说,我根据这个问题的answer获得了距离矩阵。但是,我无法弄清楚如何将这种方法推广到一个环境,在该环境中我没有不同的N x D坐标系,而又没有遍历那些坐标系(这会太昂贵)。

这是我目前用于获取给定坐标的距离矩阵的张量流代码。

coordinate_norms = tf.reduce_sum(coordinates * coordinates, 1)
coordinate_norms = tf.reshape(coordinate_norms, [-1, 1])
distances = coordinate_norms - 2 * tf.matmul(coordinates, tf.transpose(coordinates)) + tf.transpose(coordinate_norms)

如果仅在此处使用该方法,则张量尺寸不正确。

1 个答案:

答案 0 :(得分:0)

我发现,只需将距离矩阵的计算包装到一个函数中,然后使用tf.map_fn沿输入张量的所需轴进行映射即可轻松实现。

def calculate_distance(coordiantes):
   coordinate_norms = tf.reduce_sum(coordinates * coordinates, 1)
   coordinate_norms = tf.reshape(coordinate_norms, [-1, 1])
   distances = coordinate_norms - 2 * tf.matmul(coordinates, tf.transpose(coordinates)) + tf.transpose(coordinate_norms)

d = tf.map_fn(calculate_distance, X)