python - BCELoss 用于二进制像素级分割 pytorch

标签 python deep-learning pytorch

我在使用 Sigmoid 和 BCELoss 的同时为二进制分割实现了一个 UNet。问题在于,经过几次迭代后,网络尝试预测每个像素的非常小的值,而对于某些区域,它应该预测接近 1 的值(对于地面真值掩模区域)。它是否给出了关于错误行为的任何直觉?

此外,还存在用于逐像素损失的 NLLLoss2d。目前,我只是忽略了这一点,直接使用 MSELoss() 。我应该将 NLLLoss2d 与 Sigmoid 激活层一起使用吗?

谢谢

最佳答案

在我看来,您的 Sigmoid 正在使激活图饱和。图像未正确归一化或缺少某些批量归一化层。如果您有一个与其他图像一起工作的实现,请检查图像加载器并确保它不会使像素值饱和。这通常发生在 16 位 channel 上。你能分享一些输入图像吗?

PS 很抱歉在回答中发表评论。这是一个新帐户,我还不能发表评论。

关于python - BCELoss 用于二进制像素级分割 pytorch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45184741/

相关文章:

python - 在 Python 中优化数据帧子集操作

Python Regex - 如何将给定的正则表达式模式限制为一定范围的字符

python - 在 Python 中创建对象数组

pytorch - 为什么 PyTorch 的内置损失函数仅适用于 Long 张量类型?

python - 如何在pytorch中定义具体数量的卷积核/过滤器?

machine-learning - Tensorflow 计算图像中的对象数

python - Keras 功能 API : Pooling input does not give correct output shape

machine-learning - CNN 每个节点的范围更窄,因此每层的范围更大?

python - 在 PyTorch 中本地测量多类分类的 F1 分数

python - 模块未找到错误 : No module named 'tools.nnwrap'