我正在尝试用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)定义渐变。有没有人能够成功实施
答案 0 :(得分:4)
操作tf.argmax()
不可区分,这就是未实现渐变的原因。您不能直接优化Jaccard,因为它不可区分。
准确性也是如此,当您训练分类器时,即使您只关心准确度,也可以优化可微分损失,因为精度不可区分。
因此,您的问题无法解决,您必须使用能够区分和优化损失的损失函数,而不是jaccard。
答案 1 :(得分:1)
我今天遇到了同样的问题,我意识到没有tf.argmax()
函数(没有梯度)就无法计算骰子损失。