【发布时间】:2021-03-15 10:48:45
【问题描述】:
我正在使用 UNet 进行多类分割。我对模型的输入是HxWxC,我的输出是,
outputs = layers.Conv2D(n_classes, (1, 1), activation='sigmoid')(decoder0)
使用SparseCategoricalCrossentropy 我可以很好地训练网络。现在我也想尝试骰子系数作为损失函数。实现如下,
def dice_loss(y_true, y_pred, smooth=1e-6):
y_true = tf.cast(y_true, tf.float32)
y_pred = tf.math.sigmoid(y_pred)
numerator = 2 * tf.reduce_sum(y_true * y_pred) + smooth
denominator = tf.reduce_sum(y_true + y_pred) + smooth
return 1 - numerator / denominator
但是,我实际上是在增加损失而不是减少损失。我检查了多个来源,但我发现的所有材料都使用 diceloss 进行二进制分类而不是多类。所以我的问题是执行是否有问题。
【问题讨论】:
-
@DavidS 谢谢你确实解决了问题
标签: python tensorflow tensorflow2.0 semantic-segmentation