计算张量中每个元素相对于另一个张量的最小距离



使用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))

是否有一个将更有效地计算值的张sorflow函数?

类似于

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

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

在谱聚类中,你找到输入向量的低维近似值,然后在那里运行完整的穷举搜索。

在K-means聚类中,你会发现较少数量的目标(称为质心),它们是目标簇的"代表"。你对质心进行详尽的搜索。然后对与质心相关的目标进行另一次搜索,忽略所有其他目标。所以如果你有100个质心,你就可以减少100倍的计算。如果你把这个问题看成是一个完全连通的二部图,就等于增加了一个树形结构的层。

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

最新更新