2016-11-12 2 views
0

mit Tensorflow, ich versuche, den Verlust für einen Tensor relativ zu einer bekannten Menge zu berechnen.Berechnen Mindestabstand für jedes Element in einem Tensor relativ zu einem anderen Tensor

gegeben:

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]] 

ich zurückkehren wollen:

[0.0, 0.0499, 0.02] 

ich den Wert finden zu einer Zeit durch jede gehen guess mit:

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

gibt es eine tensorflow Funktion, die die Werte effizienter berechnen wird?

Antwort

1

Etwas wie:

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 
+0

Wow, das ist sehr schlau. Vielen Dank. –

0

Es gibt ungefähre Möglichkeiten, diese Berechnung auszuführen. Die zwei klassischen Wege sind spektrales Clustering und K-Means Clustering. Sie lösen jeweils zwei Probleme: 1) Sie haben Vektoren mit großen Dimensionen, 2) Sie haben eine große Anzahl von Zielen. Sie können kombiniert und durch Verwendung von neuronalen Netzen verallgemeinert werden. Beides sollte im Tensorfluss ausdrückbar sein.

Im Spektralclustering finden Sie eine niedrigdimensionale Approximation der Eingabevektoren, dann führen Sie die vollständige, erschöpfende Suche dort durch.

Beim K-Means-Clustering finden Sie eine geringere Anzahl von Zielen (so genannte Zentroide), die für Zielcluster "repräsentativ" sind. Sie führen eine erschöpfende Suche nach den Zentroiden durch. Führen Sie dann eine weitere Suche nach den Zielen durch, die den Zentroiden zugeordnet sind, und ignorieren Sie alle anderen Ziele. Wenn Sie also 100 Schwerpunkte haben, reduzieren Sie die Berechnung um den Faktor 100. Wenn Sie das Problem als vollständig verbundenen zweiteiligen Graphen betrachten, ist es gleichbedeutend mit dem Hinzufügen einer Ebene mit einer Baumstruktur.

Hinweis: In Ihrem obigen Problem können Sie die Schleifenumleitung mit einem Tensor-Vorgang ändern.

+0

Sie erwähnen einen "Tensor-Betrieb" für meine Schleife. Meinst du sowas wie tf.while_loop()? Ich kämpfe mit dem, wie das aufgebaut würde. –

+0

Nein, siehe Antwort oben von MMN, um nur einen Vorgang auszuführen. – drpng

Verwandte Themen