Tensorflow 中的 Dice/Jaccard 系数优化

bno*_*orm 3 python optimization machine-learning neural-network tensorflow

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

tf.argmax(output, axis = 3)
Run Code Online (Sandbox Code Playgroud)

它返回一个“int”数据类型,张量流优化器(特别是AdamOptimizer)似乎不接受,所以我然后将其转换为浮点数

tf.cast(tf.argmax(output, axis = 3), tf.float32)
Run Code Online (Sandbox Code Playgroud)

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

Gui*_*ull 5

该操作tf.argmax()是不可微分的,这就是梯度未实现的原因。你不能直接优化 Jaccard,因为它是不可微分的。

准确性也会发生同样的情况,当您训练分类器时,即使您只关心准确性,也会优化可微分损失,因为准确性是不可微分的。

因此,您的问题没有解决方案,您必须使用可以区分和优化该损失的损失函数,而不是 jaccard。