Hi

I have a simple binary classifier model, but I didn’t use `Sigmoid`

at the end so I’ve trained my model with `BCEWithLogitsLoss`

criterion.

My targets(true labels) is created based on a value like `if value >= 0`

then target is `1`

else `0`

.

The question is in testing what should I set as threshold? `0.5`

or `0.0`

?

Hi Mehdi!

You should use 0.0 as your threshold for class “1”.

Here are the details:

A *logit* is a sort of score that runs from -infinity to +infinity.

When you run it through the sigmoid function, you get a

probability that runs from 0 to 1. (`BCEWithLogitsLoss`

has,

in effect, a sigmoid function inside of it.) We interpret this

probability as being the probability of class “1”. So we (usually)

convert such a probability to a yes-no prediction by saying if

the probability of being class “1” is greater than 1/2, then we

predict class “1” (and if it is less that 1/2, we predict class “0”).

The sigmoid function maps logits less than 0 to probabilities

less than 1/2 (and logits greater than 0 to probabilities greater

than 1/2, and sigmoid (0) = 1/2).

So, if your probability threshold is 1/2 (as it typically is), then

your logit threshold is 0.

To recap: As you’ve described it, the output of your model is a

logit (because that is what you’ve trained your model to output),

so to convert the output of your model to a yes-no prediction, use

a threshold of 0.

Best.

K. Frank

Thanks for your thorough answer!