我对pytorch完全陌生。我正在参加一个电子课程,并正在尝试使用pytorch。所以我遇到了两个损失函数(使用这两个损失的假设是logits的数值稳定性):
nn.BCEWithLogitsLoss()
和
nn.BCELoss()
为了对代码和这两个损失函数进行适当的调整,我使用了完全不同的精度曲线!例如,使用**nn.BCELoss()**作为以下代码片段:
model = nn.Sequential(
nn.Linear(D, 1),
nn.Sigmoid()
)
criterion = nn.BCELoss()
准确度图为:enter image description here
对于nn.BCEWithLogitsLoss(),如下所示:
model = nn.Linear(D, 1)
criterion = nn.BCEWithLogitsLoss()
准确度图为:enter image description here
这两个例子的其余代码是相同的。(注意,损失曲线是相似的和体面的)两个片段的倾斜曲线是这样的:enter image description here我不知道是什么原因导致了这个问题(如果我的代码中有bug或者我的pytorch有什么问题。谢谢你的时间,并提前帮助。
1条答案
按热度按时间dy2hfwbg1#
BCELoss()期望您的输出是概率,即使用sigmoid激活。
BCEWithLogitsLoss()期望您的输出是logits,即没有sigmoid激活。
我想你可能计算错了(比如精度)。这里我给予你一个基于你的代码的简单例子:
概率:
现在用logits