Ima*_*ahn 11 python implementation loss deep-learning pytorch
根据PyTorch 文档,该类的优点BCEWithLogitsLoss()是可以使用
用于数值稳定性的 log-sum-exp 技巧。
BCEWithLogitsLoss()如果我们使用参数reduction设置为 的类None,他们有一个公式:
我现在简化了条款,经过几行计算后得到:
我很好奇源代码是否是这样做的,但我找不到它。他们唯一的代码是这样的:
Del*_*lil 16
nn.BCEWithLogitsLoss实际上只是 sigmoid 函数内部的交叉熵损失。如果模型的输出层未使用 sigmoid 封装,则可以使用它。通常与单个输出层神经元的原始输出一起使用。
简而言之,模型的输出pred将是一个原始值。为了获得概率,您必须使用torch.sigmoid(pred). (要获得实际的类标签,您需要torch.round(torch.sigmoid(pred))。)但是,当您使用 时,您不需要执行类似的操作(即采用 sigmoid)nn.BCEWithLogitsLoss。在这里你只需要做以下操作——
criterion = nn.BCEWithLogitsLoss()
loss = criterion(pred, target) # pred is just raw nn output
Run Code Online (Sandbox Code Playgroud)
因此,来到实现部分,criterion 接受两个 torch 张量 - 一个是原始 nn 输出,另一个是真实的类标签,然后使用 sigmoid 包装第一个张量 - 对于张量中的每个元素,然后计算每对的交叉熵(-(target*log(sigmoid(pred)))损失并将其简化为意思。
| 归档时间: |
|
| 查看次数: |
26735 次 |
| 最近记录: |