【发布时间】:2020-09-14 14:47:36
【问题描述】:
我正在学习使用 PyTorch 的二元分类教程,在这里,网络的最后一层是 torch.Linear(),只有一个神经元。 (有意义)这将给我们一个神经元。如pred=network(input_batch)
之后损失函数的选择是loss_fn=BCEWithLogitsLoss()(这比先使用softmax然后计算损失在数值上稳定),它将Softmax函数应用于最后一层的输出,给我们一个概率。所以在那之后,它会计算二进制交叉熵来最小化损失。
loss=loss_fn(pred,true)
我担心的是,毕竟作者使用了torch.round(torch.sigmoid(pred))
为什么会这样?我的意思是我知道它会得到[0,1] 范围内的预测概率,然后以默认阈值 0.5 对值进行四舍五入。
在网络中的最后一层之后使用sigmoid 一次不是更好,而不是在两个不同的地方使用softmax 和sigmoid,因为它是一个二进制分类?
这样不是更好吗
out = self.linear(batch_tensor)
return self.sigmoid(out)
然后计算BCE损失并使用argmax()检查准确性??
我只是好奇这会是一个有效的策略吗?
【问题讨论】:
-
您正在学习的教程是什么?为什么不简单地包含一个链接?
-
不,
BCEWithLogitsLoss不应用 softmax。它将 sigmoid 应用于 logits,然后是二进制交叉熵。 pytorch.org/docs/stable/nn.html#bcewithlogitsloss -
这是来自 PluralSight 的付费视频。抱歉,我在二元类和多类之间感到困惑
标签: deep-learning neural-network pytorch recurrent-neural-network