2017-03-15 3 views
1

Wenn ich dieVerlustfunktion: mittlere paarweise quadratische Fehler

tf.losses.mean_pairwise_squared_error(labels, predictions, weights=1.0, scope=None, loss_collection=tf.GraphKeys.LOSSES) 

Funktion, ich bin sicher, dass die Daten richtig sind. Der Verlust auf dem Tensorboard ist jedoch immer Null. Ich versuche es herauszufinden, weiß aber nicht warum? Das Folgende ist der Teil meines Codes. Benutze ich die falsche Form?

score_a=tf.reshape(score,[-1])#shape: [1,39] 
ys_a=tf.reshape(ys,[-1])#shape: [1,39] 
with tf.name_scope('loss'): 
loss=tf.losses.mean_pairwise_squared_error(score_a,ys_a) 

Antwort

0

verwenden tf.losses.mean_pairwise_squared_error(), labels und predictions sollte als batch_size verwendet werden, mindestens 2, weil die erste Dimension von Rang sein. Es bedeutet, dass Sie score_a und ys_a nicht umformen müssen. (Ich gehe davon aus, dass score_a und ys_a haben 39 Einträge und eine Charge.)

Wenn labels und predictions sind von Rang 1, bedeutet dies, dass alle Daten-Einträge sind 0-Tensor (Skalar), so dass das Ergebnis tf.losses.mean_pairwise_squared_error() immer Null wird .

Eine weitere Sache. Meiner Meinung nach sieht die aktuelle Implementierung (2018-01-03) von tf.losses.mean_pairwise_squared_error() nicht perfekt aus. Zum Beispiel, wie in den API document of the function showin, legen Sie die folgenden Daten als labels und predictions:

labels = tf.constant([[0., 0.5, 1.]]) predictions = tf.constant([[1., 1., 1.]]) tf.losses.mean_pairwise_squared_error(labels, predictions) In diesem Fall sollte das Ergebnis [(0-0.5)^2+(0-1)^2+(0.5-1)^2]/3=0.5 sein, die aus dem Ergebnis 0.3333333134651184 von tensorflow unterscheiden.