【问题标题】:Mean Euclidean distance in TensorflowTensorflow 中的平均欧几里得距离
【发布时间】:2017-10-17 07:24:38
【问题描述】:

我有两个大小为 [batch_size, seq_length, 2] 的序列张量。我想计算张量之间的平均欧几里得距离。这样做的优雅方法是什么?

【问题讨论】:

  • 在哪些张量之间? [batch_size, seq_length, 0] 和 [batch_size, seq_length, 1] ?
  • 没有。两个张量的形状为 [batch_size, seq_length, 2]。其中 2 对应于 (x,y) 坐标。我想计算这两个张量之间的距离
  • 好的,你想要一个代表批量大小的平均值或距离的批量大小的单个数字?输出形状应该是什么?
  • 一个数字将是输出,它实际上是所有时间步长 (seq_len) 和该批次中所有样本 (batch_size) 中那些点的距离的平均值

标签: python tensorflow


【解决方案1】:

给定两个张量AB,每个张量的形状为[batch_size, seq_length, 2],您可以使用tf.norm 计算欧几里得距离(L2 范数):

l2_norm = tf.norm(A-B, ord='euclidean')

【讨论】:

  • 如何确保第三维是我的 (x.y) 点?我的意思是我们需要指定轴吗?
  • 当未指定轴参数时,范数是逐点计算的,这意味着 A & B 被重新整形为形状为 [batch_size*seq_length * 2] 的一维长向量。因此,A 的一般位置 (x,y) 上的每个点都与 B 的同一点 (x,y) 进行比较
  • 顺便说一句:尽可能避免使用 tf.norm,尤其是当您需要计算梯度时。这是因为tf.sqrt 在 0 附近数值不稳定,容易给出 NaN。如果可以,请使用平方距离
  • 你的意思是tf.squared_difference(a,b) 没有平方根吗?
【解决方案2】:

你也可以使用 tf.math.reduce_euclidean_norm:

tf.math.reduce_euclidean_norm(
    input_tensor, axis=None, keepdims=False, name=None
)

请参阅文档here

【讨论】:

    猜你喜欢
    • 2013-03-02
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 2015-07-15
    • 2014-02-04
    • 1970-01-01
    相关资源
    最近更新 更多