【问题标题】:Use Earth Mover's Distance as loss function in Tensorflow在 TensorFlow 中使用 Earth Mover 的距离作为损失函数
【发布时间】:2017-11-26 16:22:14
【问题描述】:

我想在 Tensorflow 中计算两个点云之间的 Earth Mover 距离作为损失函数。

pointclouds1 = tf.placeholder(tf.float32, shape=(batch_size, num_point, 3))
pointclouds2 = tf.placeholder(tf.float32, shape=(batch_size, num_point, 3))
//'3' means xyz coordinate

def get_loss(pointclouds1, pointclouds2):
    loss = EMD.getEMD(pointclouds1,pointclouds2)
    return loss

不幸的是,我得到了错误:

File "F:\pointclouds\utils\EMD.py", line 71, in groundDistance
return np.linalg.norm(x1 - x2, norm)
File "C:\Users\xu\Anaconda3\lib\site-packages\numpy\linalg\linalg.py", line 2257, in norm
raise ValueError("Improper number of dimensions to norm.")
ValueError: Improper number of dimensions to norm.

EMD.py 来自https://github.com/chalmersgit/EMD/blob/master/EMD.py

但是我可以直接使用文件来操作numpy数组:

>>python EMD.py
EMD
We got: 160.542759771
C example got 160.54277
Success

我猜这意味着我不能直接操作Tensor,那我该怎么办?

【问题讨论】:

    标签: python numpy tensorflow


    【解决方案1】:

    函数EMD.getEMD 真的在做计算吗?似乎是这样,如果我的假设是正确的,那么您误解了 tensorflow。

    Tensorflow 开发分两个阶段进行,首先您构建一个操作图,我们通常将所有这些代码分成一个build_graph() 函数。此时没有数据传入,我们只是定义我们将要执行的操作。

    其次,您创建一个会话,传入变量,并要求 tensorflow 计算某些值,例如损失。实际上,您将使用对

    的调用在 tensorflow 中进行计算
    sess.run([ops_to_compute], feed_dict={placeholder_1:input_1, placeholder_2:input_2, ...})
    

    为了使用自定义损失函数,您需要在 tensorflow 中定义损失函数。如果你曾经在损失函数的定义中使用过 numpy 函数,你就知道你做错了。您必须使用 tensorflow 操作定义损失函数。

    这样做通常很简单。您通常只需查看当前代码中的 numpy 操作并重新创建相同的 tensorflow 操作。

    【讨论】:

    • 非常感谢!我会尝试重新创建tensorflow操作。
    • @zhengqi-xu 你在tensorflow中实现了EMD吗?我正在努力寻找一个好的资源
    • @rfho_bdss 你可以查看 NIMA 论文的 repos,他们使用 emd loss 进行分类。
    • 对于任何在 tf 中寻找实现的人:github.com/master/nima/blob/master/nima.py#L58
    【解决方案2】:

    您可以使用沉角距离的可微张量流实现,它是 EMD 距离的近似值。

    https://github.com/jaberkow/TensorFlowSinkhorn

    【讨论】:

      猜你喜欢
      • 2019-12-25
      • 1970-01-01
      • 2017-12-14
      • 2017-09-12
      • 2021-01-14
      • 1970-01-01
      • 2020-02-25
      • 2020-02-09
      • 2019-01-20
      相关资源
      最近更新 更多