当我使用
时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)
答案 0 :(得分:0)
要使用tf.losses.mean_pairwise_squared_error()
,labels
和predictions
的排名应至少为2,因为第一个维度将用作batch_size
。这意味着您无需重新塑造score_a
和ys_a
。 (我假设score_a
和ys_a
有39个条目和一个批次。)
如果labels
和predictions
的等级为1,则表示所有数据条目都是0张量(标量),因此tf.losses.mean_pairwise_squared_error()
的结果始终为零。
还有一件事。在我看来,tf.losses.mean_pairwise_squared_error()
的当前实施(2018-01-03)看起来并不完美。例如,如API document of the function中所示,将以下数据设为labels
和predictions
:
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)