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 )定义梯度。有没有人能够成功实施
该操作tf.argmax()是不可微分的,这就是梯度未实现的原因。你不能直接优化 Jaccard,因为它是不可微分的。
准确性也会发生同样的情况,当您训练分类器时,即使您只关心准确性,也会优化可微分损失,因为准确性是不可微分的。
因此,您的问题没有解决方案,您必须使用可以区分和优化该损失的损失函数,而不是 jaccard。