是否可以将 PyTorch 的“BatchNorm1d”与“BCELossWithLogits”一起使用?

Is it possible to use PyTorch's `BatchNorm1d` with `BCELossWithLogits`?

我正在尝试规范化我的分类器的输出,该分类器使用 BCELossWithLogits 作为其损失函数的一部分。据我所知,这在内部实现了 Sigmoid 函数并输出了损失。

我想在计算损失之前对 sigmoid 函数的输出进行归一化。是否可以将 BatchNorm1dBCELossWithLogits 一起使用?或者将输出张量传递给torch.sigmoidBatchNorm1d并单独计算BCELoss是唯一可能的解决方案吗?

谢谢。

您可以使用 BCELoss instead of BCELossWithLogits 描述为:

This loss combines a Sigmoid layer and the BCELoss in one single class. This version is more numerically stable than using a plain Sigmoid followed by a BCELoss

例如,

m = nn.Sigmoid()
bn = nn.BatchNorm1d(3)
loss = nn.BCELoss()
input = torch.randn((2, 3), requires_grad=True)
target = torch.empty(2, 3).random_(2)
output = loss(m(bn(input)), target)
output.backward()