我在使用 Sigmoid 和 BCELoss 的同时为二进制分割实现了一个 UNet。问题在于,经过几次迭代后,网络尝试预测每个像素的非常小的值,而对于某些区域,它应该预测接近 1 的值(对于地面真值掩模区域)。它是否给出了关于错误行为的任何直觉?
此外,还存在用于逐像素损失的 NLLLoss2d。目前,我只是忽略了这一点,直接使用 MSELoss() 。我应该将 NLLLoss2d 与 Sigmoid 激活层一起使用吗?
谢谢
最佳答案
在我看来,您的 Sigmoid 正在使激活图饱和。图像未正确归一化或缺少某些批量归一化层。如果您有一个与其他图像一起工作的实现,请检查图像加载器并确保它不会使像素值饱和。这通常发生在 16 位 channel 上。你能分享一些输入图像吗?
PS 很抱歉在回答中发表评论。这是一个新帐户,我还不能发表评论。
关于python - BCELoss 用于二进制像素级分割 pytorch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45184741/