【问题标题】:computing minimum distance for each element in a tensor relative to another tensor计算张量中每个元素相对于另一个张量的最小距离
【发布时间】:2016-11-12 00:23:43
【问题描述】:

使用 tensorflow,我正在尝试计算张量相对于已知集合的损失。

给定:

targets = [[.1,.2,.3],[.3,.2,.1],[.5,.3,.5],[.5,.5,.5],[.6,.8.,9]]
guesses = [[.5,.5,.5],[.3,.3,.4],[.5,.6,.4]]

我想回来:

[0.0, 0.0499, 0.02]

我可以一次通过每个猜测找到值:

for i in range(guesses):
    tf.reduce_min(tf.reduce_sum(tf.square(targets - guesses[i]),1))

是否有 tensorflow 函数可以更有效地计算值?

【问题讨论】:

    标签: python python-3.x tensorflow


    【解决方案1】:

    类似:

    import numpy as np
    import tensorflow as tf
    
    targets = np.array([[.1,.2,.3],[.3,.2,.1],[.5,.3,.5],[.5,.5,.5],[.6,.8,.9]])
    guesses = np.array([[.5,.5,.5],[.3,.3,.4],[.5,.6,.4]])
    
    targets = tf.reshape(targets,(5, 1, 3))
    goal = tf.reduce_min(tf.reduce_sum(tf.square(targets - guesses), 2), 0)
    sess = tf.Session()
    o = sess.run(goal)
    print o
    

    【讨论】:

    • 哇,太聪明了。谢谢。
    【解决方案2】:

    有一些近似的方法来运行这个计算。两种经典方法是谱聚类和 K 均值聚类。它们分别解决了两个问题:1)你有大尺寸的向量,2)你有大量的目标。它们可以通过使用神经网络进行组合和泛化。两者都应该可以在 tensorflow 中表达。

    在谱聚类中,您会找到输入向量的低维近似值,然后在那里运行完整、详尽的搜索。

    在 K 均值聚类中,您会发现较少数量的目标(称为质心),它们是目标集群的“代表”。您对质心进行了详尽的搜索。然后在与质心关联的目标上运行另一个搜索,忽略所有其他目标。因此,如果您有 100 个质心,则可以将计算量减少 100 倍。如果您将问题视为完全连接的二部图,则相当于添加了具有树结构的层。

    注意:在您的上述问题中,您可以使用张量操作更改围绕猜测的循环。

    【讨论】:

    • 您提到对我的循环使用“张量操作”。你的意思是像 tf.while_loop() 吗?我正在为如何构建它而苦苦挣扎。
    • 不,请参阅上面来自 MMN 的答案以仅运行一项操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多