Я пытаюсь написать нейронную сеть для двоичной классификации в PyTorch, и меня смущает функция потерь.
Я вижу, что BCELoss - это общая функция, специально предназначенная для двоичной классификации.Я также вижу, что выходной слой из N выходов для N возможных классов является стандартным для общей классификации.Однако для двоичной классификации кажется, что это может быть 1 или 2 выхода.
Итак, я должен иметь 2 выхода (1 для каждой метки) и затем конвертировать мои 0/1 обучающие метки в [1,0] и [0,1] или использовать что-то вроде сигмоида для вывода с одной переменной?
Вот соответствующие фрагменты кода, которые вы можете увидеть:
self.outputs = nn.Linear(NETWORK_WIDTH, 2) # 1 or 2 dimensions?
def forward(self, x):
# other layers omitted
x = self.outputs(x)
return F.log_softmax(x) # <<< softmax over multiple vars, sigmoid over one, or other?
criterion = nn.BCELoss() # <<< Is this the right function?
net_out = net(data)
loss = criterion(net_out, target) # <<< Should target be an integer label or 1-hot vector?
Спасибозаранее.