Можно ли использовать `BatchNorm1d` PyTorch с `BCELossWithLogits`?

Я пытаюсь нормализовать выходные данные моего классификатора, который использует BCELossWithLogits как часть своей функции потерь. Насколько я знаю, это реализует внутреннюю функцию Sigmoid и выводит потери.

Я хочу нормализовать вывод сигмовидной функции до расчета потерь. Можно ли использовать BatchNorm1d с BCELossWithLogits? Или передача выходного тензора в torch.sigmoid в BatchNorm1d и отдельное вычисление BCELoss единственное возможное решение?

Спасибо.

Оптимизация производительности модели: Руководство по настройке гиперпараметров в Python с Keras
Оптимизация производительности модели: Руководство по настройке гиперпараметров в Python с Keras
Настройка гиперпараметров - это процесс выбора наилучшего набора гиперпараметров для модели машинного обучения с целью оптимизации ее...
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Udacity Nanodegree Capstone Project: Классификатор пород собак
Udacity Nanodegree Capstone Project: Классификатор пород собак
Вы можете ознакомиться со скриптами проекта и данными на github .
Определение пород собак с помощью конволюционных нейронных сетей (CNN)
Определение пород собак с помощью конволюционных нейронных сетей (CNN)
В рамках финального проекта Udacity Data Scietist Nanodegree я разработал алгоритм с использованием конволюционных нейронных сетей (CNN) для...
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
0
0
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать 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()

Другие вопросы по теме