张量流中的骰子/ Jaccard系数优化

时间:2017-03-20 18:18:28

标签: python optimization machine-learning tensorflow neural-network

我正在尝试用Dice或Jaccard的系数来优化我的网络。我的问题是图像分割问题,所以我的输出是一个形状的张量(1,256,256,11)。为了计算我的输出和真实图像的交集,我采取

tf.argmax(output, axis = 3)

返回数据类型为“int”的数据类型,其中tensorflow优化器(特别是AdamOptimizer)似乎没有采用,因此我将其转换为带有

的浮点数
tf.cast(tf.argmax(output, axis = 3), tf.float32)

然而,似乎没有为tf.cast(或tf.argmax)定义渐变。有没有人能够成功实施

2 个答案:

答案 0 :(得分:4)

操作tf.argmax()不可区分,这就是未实现渐变的原因。您不能直接优化Jaccard,因为它不可区分。

准确性也是如此,当您训练分类器时,即使您只关心准确度,也可以优化可微分损失,因为精度不可区分。

因此,您的问题无法解决,您必须使用能够区分和优化损失的损失函数,而不是jaccard。

答案 1 :(得分:1)

我今天遇到了同样的问题,我意识到没有tf.argmax()函数(没有梯度)就无法计算骰子损失。

对于类似情况的一种可能解决方案是使用广义骰子系数,即,将softmax预测与“ one_hot”地面真相图像结合用作输入。