Я пытаюсь нормализовать выходные данные моего классификатора, который использует BCELossWithLogits
как часть своей функции потерь. Насколько я знаю, это реализует внутреннюю функцию Sigmoid и выводит потери.
Я хочу нормализовать вывод сигмовидной функции до расчета потерь. Можно ли использовать BatchNorm1d
с BCELossWithLogits
? Или передача выходного тензора в torch.sigmoid
в BatchNorm1d
и отдельное вычисление BCELoss
единственное возможное решение?
Спасибо.
Вы можете использовать BCELoss
вместо 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()