使用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倍的计算。如果你把这个问题看成是一个完全连通的二部图,就等于增加了一个树形结构的层。
注意:在上面的问题中,您可以使用张量操作来改变围绕猜测的循环。