损失函数:平均成对平方误差

时间:2017-03-15 09:20:44

标签: tensorflow

当我使用

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

功能,我确信数据是正确的。但是,张量板上的损失始终为零。我努力找到它,但不知道为什么?以下是我的代码的一部分。我使用了错误的形状吗?

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)

2 个答案:

答案 0 :(得分:0)

要使用tf.losses.mean_pairwise_squared_error()labelspredictions的排名应至少为2,因为第一个维度将用作batch_size。这意味着您无需重新塑造score_ays_a。 (我假设score_ays_a有39个条目和一个批次。)

如果labelspredictions的等级为1,则表示所有数据条目都是0张量(标量),因此tf.losses.mean_pairwise_squared_error()的结果始终为零。

还有一件事。在我看来,tf.losses.mean_pairwise_squared_error()的当前实施(2018-01-03)看起来并不完美。例如,如API document of the function中所示,将以下数据设为labelspredictions

labels = tf.constant([[0., 0.5, 1.]]) predictions = tf.constant([[1., 1., 1.]]) tf.losses.mean_pairwise_squared_error(labels, predictions) 在这种情况下,结果应为[(0-0.5)^2+(0-1)^2+(0.5-1)^2]/3=0.5,这与张量流的结果0.3333333134651184不同。

[更新] tf.losses.mean_pairwise_squared_error()中的错误(如上所述)已修复并应用于tensorflow 1.6.0。

答案 1 :(得分:0)

如果要进行分类,则您的label张量可能在一维中具有分类值。在这种情况下,您需要执行一次热转换以匹配预测的形状,然后再调用tf.losses.mean_pairwise_squared_error()。您无需重塑预测。

labels_a = tf.one_hot(labels, 2)