是否可以将 PyTorch 的“BatchNorm1d”与“BCELossWithLogits”一起使用?
Is it possible to use PyTorch's `BatchNorm1d` with `BCELossWithLogits`?
我正在尝试规范化我的分类器的输出,该分类器使用 BCELossWithLogits
作为其损失函数的一部分。据我所知,这在内部实现了 Sigmoid 函数并输出了损失。
我想在计算损失之前对 sigmoid 函数的输出进行归一化。是否可以将 BatchNorm1d
与 BCELossWithLogits
一起使用?或者将输出张量传递给torch.sigmoid
到BatchNorm1d
并单独计算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()
我正在尝试规范化我的分类器的输出,该分类器使用 BCELossWithLogits
作为其损失函数的一部分。据我所知,这在内部实现了 Sigmoid 函数并输出了损失。
我想在计算损失之前对 sigmoid 函数的输出进行归一化。是否可以将 BatchNorm1d
与 BCELossWithLogits
一起使用?或者将输出张量传递给torch.sigmoid
到BatchNorm1d
并单独计算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()