machine-learning - 实现骰子损失的正确方法是什么?sigmoid 还是 softmax?
问题描述
我有一个二元语义分割问题,我脑子里有两种方法。
方法一:用sigmoid激活的Unet输出一类,然后我用dice loss来计算loss
方法 2:ground truth 连接到它是逆的,因此有 2 个类。Unet 的输出是 2 个类,并对它们应用 softmax 激活。然后使用骰子损失来计算损失。
哪个是对的?
解决方案
这个问题已经在这里回答了。如果您有 2 类问题,则仅输出 1 个通道,使用 sigmoid 函数(输出值介于 0 和 1 之间)。然后,您可以使用输出(连续值)和目标(单通道 one-hot-encoded,离散值)计算骰子损失。如果您的网络输出 2 个通道,则使用 softmax 函数并使用输出(连续值)和目标(2 通道 one-hot-encoded)计算损失。前者是首选,因为您将拥有更少的参数。
推荐阅读
- linux - 如何设置半小时和 45 分钟的时区而不用担心 Linux 中 DST 的变化?
- pandas - 使用多索引更新单列时创建重复行
- php - PHP 文件中的 $_POST 数组显示空结果
- node.js - apollo-server-express CORS 问题
- grails - Grails sessionFactory 等效于 Domain.withNewSession 和 withTransaction
- java - Azure 连接无法连接证书错误
- jquery - 如何在没有 JS 的情况下使 instagram iframe 具有响应性?
- python - 从 Flask 生成(内联 CSS)HTML 模板不起作用
- terminal - 无法在终端中运行 utop
- r - 如何使用apply()根据R中不同列中的条件添加新列