批量平均欧几里德距离

时间:2017-12-04 22:21:59

标签: tensorflow linear-algebra

我需要计算张量x和一组张量ys之间的平均欧几里德距离(在张量流中表示为具有附加维度的单个张量)。对于可行的训练,计算必须分批(只有xs,ys保持不变),计算也必须是可微分的,我不知道广播是否违反了这个要求。我知道如何计算所有张量的平均值以及xs和ys之间的欧几里德距离,其中xs与ys具有相同的维数,但在这里我有点迷失。

1 个答案:

答案 0 :(得分:0)

我想我已经弄明白了(x和y都是形状(number, input)):

def pairwiseL2Norm(x, y):
    x_reshaped = tf.reshape(x, shape=[-1, 1, num_input])
    y_reshaped = tf.reshape(y, shape=[1, -1, num_input])
    x_squared = x_reshaped*x_reshaped
    y_squared = y_reshaped*y_reshaped
    multiplied = x_reshaped * y_reshaped

    #x^2-2xy+y^2
    #((x_i)_xy)^2-2*((x_i)_xy)((y_j)_xy)+((y_j)_xy)^2
    combined = x_squared - 2*multiplied + y_squared

    summed = tf.reduce_sum(combined, axis=2)
    return tf.sqrt(summed)

然后是平均值:

distance = tf.reduce_mean(pairwiseL2Norm(gen_images, features), axis=1)