首页 > 解决方案 > 实现骰子损失的正确方法是什么?sigmoid 还是 softmax?

问题描述

我有一个二元语义分割问题,我脑子里有两种方法。

方法一:用sigmoid激活的Unet输出一类,然后我用dice loss来计算loss

方法 2:ground truth 连接到它是逆的,因此有 2 个类。Unet 的输出是 2 个类,并对它们应用 softmax 激活。然后使用骰子损失来计算损失。

哪个是对的?

标签: machine-learningkerasdeep-learningimage-segmentation

解决方案


这个问题已经在这里回答了。如果您有 2 类问题,则仅输出 1 个通道,使用 sigmoid 函数(输出值介于 0 和 1 之间)。然后,您可以使用输出(连续值)和目标(单通道 one-hot-encoded,离散值)计算骰子损失。如果您的网络输出 2 个通道,则使用 softmax 函数并使用输出(连续值)和目标(2 通道 one-hot-encoded)计算损失。前者是首选,因为您将拥有更少的参数。


推荐阅读