我当前使用的代码sparse_softmax_cross_entropy
工作正常。
loss_normal = (
tf.reduce_mean(tf.losses
.sparse_softmax_cross_entropy(labels=labels,
logits=logits,
weights=class_weights))
)
但是,当我尝试使用hinge_loss
:
loss_normal = (
tf.reduce_mean(tf.losses
.hinge_loss(labels=labels,
logits=logits,
weights=class_weights))
)
它报告了一个错误说:
ValueError: Shapes (1024, 2) and (1024,) are incompatible
该错误似乎源于losses_impl.py
文件中的此函数:
with ops.name_scope(scope, "hinge_loss", (logits, labels)) as scope:
...
logits.get_shape().assert_is_compatible_with(labels.get_shape())
...
我修改了我的代码如下,只提取 logits 张量的 1 列:
loss_normal = (
tf.reduce_mean(tf.losses
.hinge_loss(labels=labels,
logits=logits[:,1:],
weights=class_weights
))
)
但它仍然报告类似的错误:
ValueError: Shapes (1024, 1) and (1024,) are incompatible.
有人可以帮忙指出为什么我的代码可以正常工作,sparse_softmax_cross_entropy
但不能正常工作hinge_loss
吗?